1. 程式人生 > >“二分查詢”演算法的時間複雜度

“二分查詢”演算法的時間複雜度

演算法的時間複雜度無非就是for、while等包含起來的基本運算單元的迴圈次數


1、二分查詢

二分查詢(binary search),也稱作折半查詢(half-interval search),每次劃分一半進行下一步搜尋,所以時間複雜度無非就是while迴圈的次數!

//二分查詢 Java 實現
public static int binarySearch(Integer[] srcArray, int des) {
    int low = 0;
    int high = srcArray.length - 1;

    while ((low <= high) && (low <= srcArray.length - 1
) && (high <= srcArray.length - 1)) { int middle = (high + low) >> 1; if (des == srcArray[middle]) { return middle; } else if (des < srcArray[middle]) { high = middle - 1; } else { low = middle + 1; } } return
-1; }


2、時間複雜度

比如:總共有n個元素,每次查詢的區間大小就是n,n/2,n/4,…,n/2^k(接下來操作元素的剩餘個數),其中k就是迴圈的次數。
由於n/2^k取整後>=1,即令n/2^k=1,
可得k=log2n,(是以2為底,n的對數),所以時間複雜度可以表示O()=O(logn)

相關推薦

演算法 二分查詢時間複雜為O(log2N)的原因推理

由於二分查詢每次查詢都是從陣列中間切開查詢,所以每次查詢,剩餘的查詢數為上一次的一半,從下表可以清晰的看出查詢次數與剩餘元素數量對應關係 表-查詢次數及剩餘數 第幾次查詢 剩餘待查詢元素數量

徹底輕鬆搞定順序儲存結構元素的二分查詢時間複雜優勢以及如何算時間複雜

二分查詢也叫折半查詢,根據字面意思大概知道是怎麼個查詢具體一個元素的吧。 首先分析下查詢過程: 我們先通過被查詢的陣列得到該被查詢陣列的第一個索引和最後一個索引值,假如我們拿陣列10個元素來做例子 我們得到索引0和索引9 mid = (min(0)

二分查詢以及二分查詢時間複雜

 看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何一個開始接觸“真正”演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫一個吧,要求是對num[]={1,

二分法的時間複雜+演算法時間複雜計算

黃色標亮-劃重點背誦+自己的理解,綠色標亮-引用資源的連結,藍色標亮-要注意的地方 二分法查詢 的 時間複雜度計算 設 查詢資料的長度為n,每次查詢後資料長度減半,則有 查詢次數 資料長度 第1次查詢           n/2                      

二叉樹查詢時間複雜

原文連結:https://blog.csdn.net/li_huai_dong/article/details/79911069 給定值的比較次數等於給定值節點在二叉排序樹中的層數。如果二叉排序樹是平衡的,則n個節點的二叉排序樹的高度為Log2(n+1),其查詢效率為O(Log2n),近似於折半

設任意n個整數存放於陣列A[1..n]中,試編寫演算法,將所有正數排在所有負數前面(要求:演算法時間複雜為O(n))。

注意陣列的實際長度 #include <iostream> using namespace std; void sort(int A[],int n) { int i=0;//陣列的頭下標 int j,x; j=n-1;//陣列的尾下標 while

刪除連結串列中的某個數,演算法時間複雜是O(n)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-29 下午04:05:03 * 類說明 */ /** * @author jueying

在一個含有空格字元的字串中加入XXX,演算法時間複雜為O(N)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-18 下午10:54:54 * 類說明 */ /** * @author jueying

二分搜尋的時間複雜O(logN)如何得到

轉自:http://yixiong89921.blog.163.com/blog/static/132537788201122105228637/ 學過資料結構,當然當年也學過演算法的時間複雜度的,不知道當年是不是會推倒時間複雜度,大概也就是根據基本語句的執行次數來獲得最高的數量級吧

2.資料結構和演算法——演算法時間複雜

定義 在進行演算法分析時,語句總的執行次數T(n)時關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作:T(n) = O(f(n))。它表示歲問題規模n的增大,稱作演算法的漸進時間複雜度,簡稱為時間複雜度

堆排序優化與幾個排序演算法時間複雜

我們通常所說的堆是指二叉堆,二叉堆又稱完全二叉樹或者叫近似完全二叉樹。二叉堆又分為最大堆和最小堆。 堆排序(Heapsort)是指利用堆這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。陣列可以根據索引直接獲取元素,時間複雜度為O(1),也就是常量,因此對於取

常用資料結構與演算法時間複雜求解

1.0 資料結構的相關概念 2.0 一些基本演算法的時間複雜度 O(1): int x=1; O(n): for(int i = 0; i < n; i++){ printf("%d",i); } O(lo

第一章作業2-演算法時間複雜和空間複雜

1-1 演算法分析的兩個主要方面是時間複雜度和空間複雜度的分析。 (1分) T      1-2 N​^2​​logN和NlogN^​2​​具有相同的增長速度。 (2分) F: N​^2​​logN較快 ,取對數對增長影響還是蠻大的,畢竟裸的logn函式後期增長

演算法時間複雜

時間複雜度 演算法複雜度分為時間複雜度和空間複雜度。其作用: 時間複雜度是指執行演算法所需要的計算工作量;而空間複雜度是指執行這個演算法所需要的記憶體空間。(演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即暫存器)資

主定理求解演算法時間複雜

主定理 所謂主定理,就是用來解遞迴方程的一種方法,此方法可以用來求解大多數遞迴方程。 設遞迴方程為T(n)=aT(n/b)+f(n)  (其中a≥1,b>1) 主定理:      1. 如果存在常數ε>0有f(n)=O(n^(logb^a-ε)

利用遞迴樹求遞迴演算法時間複雜

  遞迴演算法時間複雜度的計算方程式一個遞迴方程:      在引入遞迴樹之前可以考慮一個例子:   T(n) = 2T(n/2) + n2   迭代2次可以得:   T(n) = n2 + 2(2T(n/4) + (n/2) 2)   還可以繼續迭代,將其完全展

常見排序演算法時間複雜及穩定性

排序演算法 平均時間複雜度 最壞時間複雜度 穩定性 選擇排序 O(N²) O(N²) 不穩定 氣泡排序 O(N²

三分查詢時間複雜分析

       在網上搜索了一下有關三分查詢時間複雜度分析的。有人說是O(3log3(n)),但是實驗中三分比二分更耗時,所以他們就認為不能迷信時間複雜度。我現在糾正一下(僅個人分析,供網友參考):    1.二分查詢的時間複雜度:因為每次都是折半,可以構造一顆遞迴樹,共lo

最長遞增子序列優化演算法(時間複雜為nlgn)C++實現

最長遞增子序列優化演算法(時間複雜度為nlgn) // 最長遞增子序列優化演算法.cpp : Defines the entry point for the console application. /

並行排序演算法——時間複雜O(n)的排序法

最近老師講了並行的排序演算法,讓我對這個原來不是很瞭解的排序演算法產生了濃厚的興趣。並行排序方法,是指採用平行計算的方法對一組資料進行排序,理論上是在類似內排序的環境下,採用多核並行的方法讓時間降低,排序的複雜度最好的情況下能降低至O(n)左右。 排序的實質