問:基本上...創建一種與三種不同語言相同(除了編程語言之外)的二進制搜索算法,對於八個不同大小的數組的相同的8,000,000次不成功搜索(128,512, ...,52428,(524288 * 4)= 2097152)。 我編碼這個問題的前兩種語言是C和C++,並得到正常的結果:2097152大小的陣列不超過3sPython遞歸二進制搜索功能
我決定嘗試Python出來,因爲我從來沒有編碼它,並想給它一槍。我最終得到可笑倍的算法來完成:
-For 128 elements I got 800s
-512 elements = 1005s
-2048 elements = 1682s
-8192 elements = 4152s (my computer went to sleep so this may be the sudden increase)
-32768 elements = 1714s
-131072 elements = 1890s
-524288 = 2074s
-2097152 = still running!!
(除了有8192元的陣列,這基本上遵循O(日誌(BASE2)N):平均每次遞歸檢查過程114S
。這是我第一次用Python編碼,所以我想知道:是我的代碼效率低下(事實上算法是非常基本的),還是Python無法處理遞歸調用以及C/C++/Java,尤其是當他們我的Python代碼如下:
import time
def binarySearch(array, key, min, max):
mid = int(min + ((max - min)/2))
if min >= max:
return False
elif array[mid] == key:
return True
elif array[mid] > key:
return binarySearch(array, key, min, mid - 1)
elif array[mid] < key:
return binarySearch(array, key, mid + 1, max)
i = 128
#for i in range(128, 2097152):
while i <= 2097152:
sTime = time.time()
myArray = [None] * (i-1)
for k in range(0, i-1):
myArray[k] = 13
eTime = time.time()
k = 0
startTime = time.time()
for k in range(0, 8000000):
binarySearch(myArray, 100, 0, i-1)
endTime = time.time()
print("[Size = ", i, "] 8,000,000 Unsucessful Searches took ", endTime - startTime, " seconds\n")
i = i*4
對於c/C++ 3的3s對於2 * 10^6大小的數組的二進制搜索也太多了。理想情況下,應該花費不到半秒。 – vish4071
這是python2.x嗎? 「範圍內的k(0,8000000)」將是一個非常昂貴的調用 - 如果使用'xrange'代替,會發生什麼? – mgilson
哦...你也在做8e6搜索。 (我沒有看到那部分)。那好吧。你的算法實現沒有問題。 – vish4071