Python 排序顺序搜索
您好,这里的目标是改进使用Python 排序顺序搜索,python,sequential,Python,Sequential,您好,这里的目标是改进使用顺序搜索在列表中查找元素所需的步骤数 所以我有一个未排序的列表numbers=[5,2,1,0,3],我试图找到元素3。找到它需要5个步骤 我在这里的任务是创建一个名为sortedSequentialSearch()的新函数,它以升序接收排序列表,并对其进行改进,以减少查找元素3所需的步骤 以下是我的常规顺序搜索代码: def sequentialSearch(theValues, target): n = len(theValues) count =
顺序搜索在列表中查找元素所需的步骤数
所以我有一个未排序的列表numbers=[5,2,1,0,3]
,我试图找到元素3
。找到它需要5个步骤
我在这里的任务是创建一个名为sortedSequentialSearch()
的新函数,它以升序接收排序列表,并对其进行改进,以减少查找元素3
所需的步骤
以下是我的常规顺序搜索代码:
def sequentialSearch(theValues, target):
n = len(theValues)
count = 0
for i in range(n):
count = count + 1
if theValues[i] == target:
print(f"Found, {count} steps needed")
return True
return False
如果让我传入numbers.sort()
,我如何改进这一点?在对数组进行排序后,可以使用二进制搜索。它具有对数(n)时间复杂度
在本例中为2.3步,这比3步好
搜索排序数组的一种有效方法是二进制搜索。我修改了您的代码以使用它:
def二进制搜索(值、目标、下限、上限):
中间=(上界+下界)//2
如果值[中间]==目标:
返回真值
elif上限值[中间]:
返回二进制搜索(值,目标,中间+1,上限)
其他:
返回二进制搜索(值,目标,下界,中间-1)
另一个选择是。如果数字均匀分布,则此算法比二进制搜索更有效,平均log(log(n))
time。但最坏的情况并不是这样,因为如果数字按指数变化,可能需要花费时间。您可以尝试二进制搜索。它将把搜索时间缩短到log(n)
。