1. 程式人生 > >小朋友學資料結構(13):斐波契那查詢

小朋友學資料結構(13):斐波契那查詢

《大話資料結構》第八章8.4節介紹了斐波契那查詢。

斐波那契查詢的理解難點就一個:為什麼需要把陣列長度擴充到f[k]-1而不是f[k]或者f[k+1]? 這是為了能正確遞迴計算mid值,看下圖可發現 f[k]-1 = (f[k-1] + f[k-2]) - 1 = (f[k-1]-1) + 1 + (f[k-2]-1),中間的1就是我們二分的錨點mid,如果目標在左區,陣列長度就縮到(f[k-1]-1),如果在右區,陣列長度就縮到(f[k-2]-1),否則就等於mid完成查詢。而(f[k-1]-1)又能拆成(f[k-2]-1)+1+(f[k-3]-1),這樣遞迴分割下去就能不斷的縮小區間直至找到目標。

假如擴充到f[k]或f[k+1],則不能分割出mid點。

1.png

瞭解小朋友學程式設計請加QQ307591841(微信與QQ同號),或QQ群581357582。 關注公眾號請掃描二維碼 qrcode_for_kidscode_258.jpg