问:基本上...创建一种与三种不同语言相同(除了编程语言之外)的二进制搜索算法,对于八个不同大小的数组的相同的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