二分查找最大比较次数证明
結論
對n個元素進行二分查找,最大比較次數為:?log2n?+1\lfloor log_2n \rfloor +1?log2?n?+1
問題
給定升序數組,各元素不同,查找某元素。
如果該元素存在:輸出該元素的下標
如果不存在該元素,輸出-1
算法思路:
- 對于有序數列(從小到大),設定左端l(最小元素下標)和右端r(最大元素下標)
- 當滿足條件l <= r時,求中點m,將中點元素的值與所要查找的值比較
- 若中點元素值比所要查找元素小,則應找后半段,所以l = m+1,否則應找前半段r = m - 1
- 重復以上過程,直到找到為止,若l > r,則說明找不到。
代碼:
二分查找的最大比較次數
按上述算法進行二分查找,證明二分查找的最大查找次數
引理1:如果k為偶數,且k≥1k\ge1k≥1,那么?log2k?=?log2(k+1)?\lfloor log_2k\rfloor=\lfloor log_2(k+1)\rfloor?log2?k?=?log2?(k+1)?
證明:
設x = ?log2k?\lfloor log_2k\rfloor?log2?k?,則有x≤log2k<x+1x\le log_2k < x+1x≤log2?k<x+1
只需證明x≤log2(k+1)<x+1x \le log_2(k+1) < x+1x≤log2?(k+1)<x+1,即可證明?log2k?=?log2(k+1)?\lfloor log_2k\rfloor=\lfloor log_2(k+1)\rfloor?log2?k?=?log2?(k+1)?
log2k<x+1?k<2x+1log_2k < x+1 \Rightarrow k <2^{x+1}log2?k<x+1?k<2x+1
由于k和2x+12^{x+1}2x+1都是整數,所以有k+1≤2x+1k+1\le2^{x+1}k+1≤2x+1
而k是偶數,k+1是奇數,2x+12^{x+1}2x+1一定是偶數,所以不可能滿足k+1=2x+1k+1=2^{x+1}k+1=2x+1
所以有k+1<2x+1?log2(k+1)<x+1k+1<2^{x+1} \Rightarrow log_2(k+1)<x+1k+1<2x+1?log2?(k+1)<x+1
易知:x≤log2k<log2(k+1)x \le log_2k <log_2(k+1)x≤log2?k<log2?(k+1)
所以x≤log2(k+1)<x+1x \le log_2(k+1) < x+1x≤log2?(k+1)<x+1,該引理得證。
證明對n個元素進行二分查找,最大比較次數為:?log2n?+1\lfloor log_2n \rfloor +1?log2?n?+1
證明:用數學歸納法
已知n為2時,找第1個元素需要比較1次,找第2個元素需要比較2次,最大查找2次,滿足?log2n?+1\lfloor log_2n \rfloor +1?log2?n?+1
假設2≤n≤k2\le n\le k2≤n≤k時,最大查找次數為?log2k?+1\lfloor log_2k \rfloor +1?log2?k?+1,證明:n為k+1時最大查找次數為?log2(k+1)?+1\lfloor log_2(k+1) \rfloor +1?log2?(k+1)?+1
n=k+1n=k+1n=k+1時,進行一次二分查找后,下一次要查找的長度為:
- 如果k+1為偶數,下一次查找的長度為k+12\frac{k+1}{2}2k+1?,查找這一段的最大查找次數為?log2k+12?+1=?log2(k+1)?\lfloor log_2\frac{k+1}{2} \rfloor +1=\lfloor log_2(k+1) \rfloor?log2?2k+1??+1=?log2?(k+1)?,加上剛剛進行的一次查找,最大查找次數為:?log2(k+1)?+1\lfloor log_2(k+1) \rfloor +1?log2?(k+1)?+1
- 如果k+1為奇數,下一次查找的長度為k/2,查找這一段的最大查找次數為:?log2k2?+1=?log2k?\lfloor log_2\frac{k}{2} \rfloor +1=\lfloor log_2k \rfloor?log2?2k??+1=?log2?k? ,當k+1為奇數即k為偶數時,根據引理1有:?log2k?=?log2(k+1)?\lfloor log_2k\rfloor=\lfloor log_2(k+1)\rfloor?log2?k?=?log2?(k+1)?,加上剛剛進行的一次查找,最大查找次數為:?log2(k+1)?+1\lfloor log_2(k+1) \rfloor +1?log2?(k+1)?+1
原命題得證。
總結
以上是生活随笔為你收集整理的二分查找最大比较次数证明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P1008 [NOIP1998 普
- 下一篇: hive能替代oracle_Hive与O