2017-03-08 97 views
-3

我按照這些指導創建基本的斐波那契搜索程序:斐波那契搜索蟒蛇:

F是斐波那契數的列表(ListFibonacci)人數達到我們的排序列表(ListElements)的長度n。 (如果n不是斐波納契數,那麼F包含直到大於n的下一個斐波納契元素的元素)。假設X是我們需要在我們的排序列表中找到的數字ListElements

爲了測試是否XListElements,按照下列步驟:

1)設k = F[p-1]其中p = len(F)(即,F最後一個元素)

2)如果k = 0,停止。沒有比賽; X不在列表中ListElements

3)將XListElements中的元素比較F[p−2]

4)如果X匹配,停止。

5)如X小於在索引F[p−2]ListElements條目,元素X必須在從1F[p-2]ListElements下部。設置p = p − 1k = F[p-1]並返回到步驟2。

6)如果該項目是比條目F[p-2]越大,元件X必須在從F[p-2]nListElements的上部。 將搜尋起始地址ListElements更新爲F[p-2]p = p − 2k = F[p-1],回到步驟2

中的加粗部分是我認爲我有問題最多,但總的來說我的理解6)是相當低的反正。澄清理解指令和編寫程序是作業的一部分。

這是我此刻的程序:

F = [0,1,1,2,3,5,8] 
ListElements = sorted([83,24,65,123,175,57,123,243]) 
X = 243 

p = len(F) 
k = F[p-1] 

if(k == 0): 
    print("K = 0") 
else: 
    while(True): 
     print("test1") 
     if(X == ListElements[F[p-2]]): 
      print(str(X) + " " + str(p) + " " + str(k)) 
      break 
     elif(X < ListElements[F[p-2]]): 
      print("test2") 
      p -= 1 
      k = F[p-1] 
     elif(X > ListElements[F[p-2]]): 
      print("test3") 
      p -= 2 
      k = F[p-1] 

下面是一些輸出:

Input: X = 123, 
Output: test1 
     123 7 8 

Input: X = 243, 
Output: test1 
     File "C:\SNIP", line 20, in <module> 
     if(X == ListElements[F[p-2]]): 
     IndexError: list index out of range 
     Traceback (most recent call last): 
     test3 
     test1 
     test3 
     test1 
     test3 
     test1 

Input: 24, 
Output: test1 
     test2 
     test1 
     test2 
     test1 
     test2 
     test1 
     test2 
     test1 
     test2 
     test1 
     24 2 1 

回答

0

我覺得你的教授或任何人設定的分配有笑,該算法甚至還沒有接近到斐波那契數列的基本算法。對於初學者您的觀點3

3)將X與ListElements中索引爲F [p-2]的元素進行比較。

詢問您要使用的號碼中的一個Fibonacci數列表爲指標,它應該是

3)指數P-2 ListElements對元素比較X。

但是,這將需要兩個列表是相同的長度,沒有任何先決條件,只要你已經顯示。 https://en.wikipedia.org/wiki/Fibonacci_search_technique

+0

我會盡力複製它,哈哈:

的斐波那契搜索一個真正的算法可以在維基百科頁面在這裏找到。也許他是!我想他說他把它複製到了別的地方,你猜這是錯誤的。 – Zed