日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

二分检索

發布時間:2024/4/17 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分检索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  現在理論的還是少說些,例子更能理解吧,來個例子用二分檢索算法設計與分析,下面算法函數過程bin_search有n+2個輸入:a,n 和 x,一個輸出j。只要待檢索的元素存在,while循環就繼續下去。case語句根據compare(x,a[mid])的結果的三種情況進行選擇運行。函數過程結束時,如果x不在表a中,則j=0,否則 a(j)=x。

void bin_search(elemType a[],int n,elemType x,int &j) { //給定一個按非遞減排列的元素數組a(1:n),n>1,判斷x是否出現。 //若是,則置j,使得x=a(j),若非,則j=0。函數返回j。 int low,high,mid; low=1;high=n;j = 0while(low<=high) { mid = (low + high) / 2//mid取不大于(low + high)÷2的整數。 switch(compare(x,a[mid])) { case ‘<’ : high = mid -1break//x小于a[mid] case ‘>’ : low = mid +1break//x大于a[mid] case ‘=’ : j = mid;return j;break//x等于a[mid] }//switch }//while return j; }//bin_search


判斷bin_search是否為一個算法,除了上面的描述外,還必須使函數compare(x,a[mid])具有恰當的定義。如果a的元素是整數,實數或字符串,則這些比較運算都可用適當的指令正確完成的。另外,還需判斷bin_search是否能終止。關于這一點留待證明算法正確性時回答,但是關于程序正確性的證明,至今為止還是一個尚未解決的課題。

  bin_search需要的空間很容易確定,它要用n個單元存放數組a[],還要有存放變量low、high、mid、x和j的5個空間單元。因此所需的空間單元是n+5。至于它的計算時間,則要分別考慮最好、平均和最壞三種情況。

  下面述說那幾個定理吧。

(1)函數過程bin_search(a[],n,x,j)能正確地運行。

(2)若n在區域[2k-1,2k]中,則對于一次成功的檢索,bin_search至多作k次比較;而對于一次不成功的檢索,或者作k-1次比較或者作k次比較。這個說明:

最壞情況下的成功或不成功檢索的計算時間都是О(log2n);
最好情況下的成功檢索在1級結點處達到,計算時間為Θ(1);
最好情況下的不成功檢索要作log2n次元素比較,所以計算時間是Θ(log2n)。
由于外部結點都在k和k+1級,因此每種不成功檢索的時間都為Θ(log2n),故
平均情況下不成功檢索的計算時間為Θ(log2n),記為U(n)。

(3)?設A(l:n)含有n(≥1)個不同的元素,且A(1)<A(2)<…<A(n)。又設用以比較為基礎的判斷x是否在A(l:n)出現的任何算法在最壞情況下所需的最小比較次數是FIND(n),那么, FIND(n)≥「log2(n+1)」。

關于這個真的是好難呀,筆者覺得要在實踐的基礎上,練習,加上理論才能深刻了解,在此只是簡約的總結一下二分檢索的相關知識。

?

?

轉載于:https://www.cnblogs.com/lihuidashen/p/3414970.html

總結

以上是生活随笔為你收集整理的二分检索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。