為什麼二分查詢法的算術複雜度為Olog2n

2021-05-28 18:56:47 字數 2859 閱讀 3971

1樓:伶揚國國

是有序線性表copy,二分查詢,不可能比bai較n次啊,比較n次你等於du是把整個線zhi性表遍歷了一遍.二分查dao找每次可以排除一半元素.

比如123456789,你要找2,首先查中間元素5,大於2,所以直接排除掉5右邊的6789

然後在1234裡繼續二分查詢.

每次排除1/2的元素,所以是o(log2n)

二分法的時間複雜度為o(log2n)是什麼意思?

2樓:不是7個漢字嗎

二分法的基本思想如下:

假設資料是按升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。

由於是陣列是預先排序好的,所以可以採用折半查詢的方式,每次拋掉待查詢部分的一半

這樣,長度為n的陣列,只需要log2n次查詢即可,2是對數的底。

例如,長度為7的陣列,最多只需要3次就可以找到o(log2n)只是表示是log2n同一數量級,因為有個取整的問題,而且也有可能在查詢過程中就已經找到(也就是某個折半查詢點正好是待查詢資料),這樣o(log2n)就是一個上限

3樓:

看資料結構或者演算法導論去。。。

c高手,順序儲存中的折半查詢的時間複雜度怎麼是 o(log2n) ?(書上有點看不懂 **)

4樓:似風幻雨

n+1/n就是常數,取無窮大時就是常數級的,所以o(n)=c*log2(n+1)-1;現在可以看出來量級是log2n這個級別了;時間複雜度就是看量級,常數的約去不看就是了

為什麼該迴圈的時間複雜度為o(log{2}n):int i = 1; while(i <= n) i = i * 2;

5樓:匿名使用者

因為從判斷語句上看i從1迴圈到n,但是迴圈體中每次迴圈i都乘以2,所以實際上迴圈體只執行了log2n次(這是個簡單的數**算吧!),而判斷時間複雜度一般都是看迴圈體的實際有效執行語句的次數,所以該迴圈的時間複雜度是o(log2n)。

複雜度o(nlog2n)怎麼計算的?

6樓:匿名使用者

for(int j=1; j<=n; j*=2)這個迴圈最終執行的次數假設為x,則x次的時候j=2^x 。

當j>n時停止執行,於是2^x>n ,則可以認為該迴圈一共執行了log2(n)次。

所以該迴圈的時間複雜度為o(log2(n)),簡記為o(log n) ,忽略掉2的底數。

方法:1、首先,看外迴圈for(i=0;i2、再看內部迴圈,for(j=1;jn===》x=log2(n)。

3、如果把兩個迴圈合在一起看,也就是一共迴圈了n個x次,也就是log2(n)。

設序列長度為n,在最壞的情況下,時間複雜度為o(log2n)的演算法是什麼

7樓:匿名使用者

二分法二分法的基本思想如下:

假設資料是按升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。

由於是陣列是預先排序好的,所以可以採用折半查詢的方式,每次拋掉待查詢部分的一半

這樣,長度為n的陣列,只需要log2n次查詢即可,2是對數的底。

例如,長度為7的陣列,最多只需要3次就可以找到o(log2n)只是表示是log2n同一數量級,因為有個取整的問題,而且也有可能在查詢過程中就已經找到(也就是某個折半查詢點正好是待查詢資料),這樣o(log2n)就是一個上限

誰能給一個時間複雜度是o(log2n)的演算法,謝謝。

8樓:匿名使用者

(1)時間頻度

一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

(2)時間複雜度

在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log(2)n),線性階o(n),

線性對數階o(nlog(2)n),平方階o(n^2),立方階o(n^3),...,

k次方階o(n^k),指數階o(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

9樓:匿名使用者

log2n和logn一樣 常數2可以忽略 有序數列二分查詢某值的演算法就是logn的

10樓:匿名使用者

我沒聽說過。不過我有md5的演算法,c++的,要可以給你

用二分法查詢,如果碰到偶數個數怎麼辦 第一次折半,中間的數是取,還是兩個 碰到奇數又怎麼辦

對於區間 a,b 上連續不斷且f a f b 0的函式y f x 通過不斷地把函式f x 的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。二分法 bisection method 即一分為二的方法.設 a,b 為r的閉區間.逐次二分法就是造出如下的區間序列 ...

根號二分之一等於多少根號二分之一為什麼等於二分之根號二

根號2分之1等於二分之根號二。約等於0.707106.根號1就是等於1,根號2分之1就可以等於根號1除以根號2,而根號1就是等於1,所以化簡就等於是根號2分之1,而根號2分之1還可以化簡的,分子分母同時乘以根號2,分子就是1乘以根號2等於根號2,分母就是根號2的平方就等於2了,所以答案化簡出來就是2...

pong既然有二分之一的中國血統,那為什麼不會說中國話?還有

因為他的爸爸是中國人,媽媽是泰國人。而pong小時候又去了國外留學,估計就忽略了中文的學習,主攻的是泰語和英語咯 不過現在pong貌似又在學拼音呢 pongd的爺爺奶奶是從廣東潮州遷過去的,pong的爸爸是中國人,但是媽媽是泰國的,所以pong從小在泰國長大,自然只會泰語,可能連他的爸爸都不會說漢語...