C語言二分法查詢次數公式怎麼推導

2022-08-26 02:40:20 字數 2095 閱讀 2707

1樓:

對具有n個元素的有序陣列進行二分法查詢,要分析的比較次數,可以使用畫二叉判定樹的方法來分析。該二叉判定樹的高度為[log2(n)]+1層,此即為二分查詢的最多比較次數,比如:n=1000,則最多比較[log2(1000)]+1=9+1=10次。

如果要計算平均的比較次數,則需要對二叉判定樹中的每個節點進行分析,處於第一層的比較1次,第二層的比較2次,第三層比較3次,依次類推……把各個節點的比較次數累加,再處於節點數(元素個數)即為平均比較次數,這裡假設查詢是在等概率的情況下進行的。

舉個例子:有9個元素的有序陣列,對每個元素按1,2,3...8,9進行編號,則其二叉判定樹如下:

圖中可以看出,如果要找的元素處在第5個位置,則只要1次比較即可找到,若找第9個元素,則需要4次比較,演算法分別比較了第5,7,8,9等4個元素。所以,平均的比較次數大概如下:

這樣分析,能看懂嗎?希望能幫到你!

2樓:聽不清啊

令在a[i]~a[j] (j-i=n-1) 這n個有序的元素中查詢元素x的查詢次數為f(n),則:

f(n)=1 若中點查詢匹配 (a[m]=x , m=(i+j)/2)

=f(n/2)+1 若中點查詢不匹配,a[m]!=x

其中的/為整數除法

最多查詢次數為f1(n)=┏log2(n+1)┓ (向上取整)

c語言二分法查詢

3樓:鷹弈

#include //不用math標頭檔案

void main()

;//hing和low賦初值

scanf("%d",&k);

while (high>=low)//>=}printf("no");

return;//if語句去掉}

4樓:我已經匿名了

#include

#include

void main()

;scanf("%d",&k);

high=9, low=0;//初值不能忘while (high>=low)//條件是》=if (k!=a[m])

else}

5樓:陸美富

high,low都沒有賦值。

6樓:伯君雅陸香

二分法查詢又稱折半查字法;

思路是.恩!

舉例吧0,1,2,3,4,5,6,7,8中找5取陣列中的一半也就是地五個4與5比較,如果4>5(就是中間的那個數比要找的那個大,那麼就取那個數之前的那部分);如果4<5(就是中間的那個數比要找的那個小,就取那個數只後的那部分);如此迴圈下去;

不好意思,語文沒學好,表達不清楚

c語言中二分法查詢問題

7樓:匿名使用者

#include int number[6] = ;int search(int num,int left,int right,int mid)

if(number[mid] == num)if(num > number[mid])else

}int main()

else return 0;}

8樓:匿名使用者

就按這個例子來說吧left = 1 right =6 mid = (left+right)/2=3就是先比較103和5 103>5 left=mid+1=4 right = 6mid= (4+6)/2=5比較103 103 相等 退出

9樓:匿名使用者

偶數也沒關係,(left+right)/2得到的還是個整數,就是中間兩個元素左邊那個……

求解一個c語言程式,二分法查詢數

10樓:匿名使用者

檔案末尾有結束標誌,還有你檔案是怎麼寫的,vi有時候會自動末尾加換行...

是不是讀的時候把那個也讀進去了,然後n就多加了一下...

你讀完檔案列印下n是多少就清楚了...

11樓:匿名使用者

**寫成這樣讓人怎麼看

二分法查詢的演算法複雜度分析,二分法查詢最壞情況下需要比較次數,為什麼n次和O(log(2)n)都對呢?後者是什麼意思

1.最壞情況抄 查詢最後一個元素 或者bai第一個元素 master定理t n t n 2 o 1 所以dut n o logn 2.最好情況查詢中間 zhi元素o 1 查詢的元素即為dao中間元素 奇數長度數列的正中間,偶數長度數列的中間靠左的元素 s n n 二分法查詢最壞情況下需要比較次數,為...

vb問題。求用二分法求平方根。如何用二分法求平方根

option explicit private sub command1 click dim x s b x val s xb x s s do while abs s b s b 2 b x s s loops format s,print x 的立方根為 s end sub 你測試一下以上的 應...

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

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