Python 评估线性搜索执行速度
当我学会如何编写代码时,有人告诉我,从算法角度来看,“break”指令并不优雅,不应该使用它。然而,我试着比较两种不同版本的线性搜索算法的执行速度,而带有for循环的版本总是更快 有什么意见吗Python 评估线性搜索执行速度,python,search,optimization,Python,Search,Optimization,当我学会如何编写代码时,有人告诉我,从算法角度来看,“break”指令并不优雅,不应该使用它。然而,我试着比较两种不同版本的线性搜索算法的执行速度,而带有for循环的版本总是更快 有什么意见吗 import numpy as np import random import time n = 100000; x = np.arange(0,n) random.shuffle(x) k=30 # the number to search for #--- OPTION 1: LINEAR SE
import numpy as np
import random
import time
n = 100000;
x = np.arange(0,n)
random.shuffle(x)
k=30 # the number to search for
#--- OPTION 1: LINEAR SEARCH USING WHILE LOOP
start_time = time.time()
i=0
while (x[i]!=k) and (i<n-1):
i+=1
print(i)
print("V1 --- %s seconds ---" % (time.time() - start_time))
#--- OPTION 2: LINEAR SEARCH USING FOR LOOP w/ BREAK
start_time = time.time()
for i in range(0,n):
if x[i]==k:
break
print(i)
print("V2 --- %s seconds ---" % (time.time() - start_time))
将numpy导入为np
随机输入
导入时间
n=100000;
x=np.arange(0,n)
随机。随机(x)
k=30#要搜索的号码
#---选项1:使用WHILE循环进行线性搜索
开始时间=time.time()
i=0
(x[i]!=k)和(i不要听“某人”的话。每个人都使用break语句。使用它们绝对没有错。它可以让你的代码更容易理解,也更简单:对我来说是双赢的。Pyhon是基于0还是基于1的索引?(你的循环不是等价的)另外,你应该在使用之前检查索引。谢谢。我已经更正了for循环中的范围。关于索引,你在“for”之前说“I=0”?顺便说一句:你使用&
运算符…有点奇怪,而且:shorticuit求值可能导致while()
version来处理索引错误。此外还有缓存预热问题。结论:在程序正确之前,不应质疑性能。还包括一些额外的调整:)。在Python中,&
似乎没有缩短ciciuit;而和
会。因此,在您的案例中,似乎无法保证评估的顺序。