今天记录一个基础的搜索算法—搜索最小值
python 的 min函数其实就是返回列表中的最小项,所以想要研究这个算法的复杂度,我编写了一个min()函数的替代函数,它返回了最小项的索引。
算法思路:
- 首先将列表中的第一个位置的值(索引为0的位置)当做最小项;
- 向右依次循环搜索,与第一个位置的值作比较,如果找到了比第一个值更小的值,则将当前位置设为最小项的位置。
算法实现:
def indexmin(lists): #定义indexmin()搜索最小值函数
minindex = 0 #首先将第一个位置的元素设为最小值
currentindex = 1 #设置第二个位置的变量
while currentindex < len(lists) - 1: #进入循环,比较列表中的每一个值
if lists[minindex] > lists[currentindex]: #将列表中的每一个元素与当前最小项元素进行比较
minindex = currentindex #比较成功则将最小项的位置换到当前位置上
currentindex +=1 #将当前的列表索引加一,继续循环
return lists[minindex] #返回列表的最小项
list1 = [2,3,4,5,6,7,3,4,5,2,1,3,4,4,3]
print(indexmin(list1))
好啦,现在我们考虑算法的复杂度。
代码中可以看到,在循环的外面,有3条指令执行相同的次数,而不管列表的长度。因此我们的算法复杂度不用考虑它们。在循环中还有3条指令。这包括if语句中的比较,minindex的重赋值,以及每次循环都要执行的currentindex的递增。
这个算法必须访问列表中的每一项元素,以确保它找到了最小项的位置。因此,对于长度为n的列表,这个算法必须进行n-1次的比较。所以,这个搜索最小值的算法的复杂度是O(n)。