Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 评估线性搜索执行速度_Python_Search_Optimization - Fatal编程技术网

Python 评估线性搜索执行速度

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

当我学会如何编写代码时,有人告诉我,从算法角度来看,“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 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;而
会。因此,在您的案例中,似乎无法保证评估的顺序。