Python 基础算法(1) - 算法简介
该系列博客的内容均为阅读《Grokking Algorithms》(Aditya Bhargava)的心得or笔记or总结
那么我们就直接进入正题吧
简单查找
这个算法应该是最普通的算法or最直接的算法了
工作原理:
在一数组里面找一个数
按顺序一个一个查找
如果匹配,则返回索引
如果在过完一遍数组都没有匹配到,则输出none
代码展示(python):
1 def Simple_Search(list, item): 2 for i in range(0, len(list) - 1): 3 if list[i] == item: 4 return i
5 return None
二分查找
输入一组有序的数组,目标输出搜索数据的位置(如果有)或者输入none(如果没有)
工作原理:
选取有序数组的中位数,判断需要搜寻的数与此数的关系。
如果该中位数比要找的数大,则将数组缩小到前一半,然后再进行上面的操作
如果该中位数比要找的数小,则将数组缩小到后一半,然后再进行上面的操作
如果该中位数等于要找的数,则该数的索引为此算法的答案。
如果找到只剩下一个数了而且此数不等于要找的数,则该数不再此数组里,返回值为none。
代码展示(python):
1 def Binary_Search(List_Array, Item): 2 Low_Index = 0 3 High_Index = len(List_Array) - 1 4 5 while Low_Index <= High_Index: 6 Mid_Index = ( Low_Index + High_Index ) // 2 7 Guess_Num = List_Array[Mid_Index] 8 if Guess_Num == Item: 9 return Mid_Index 10 if Guess_Num > Item: 11 High_Index = Mid_Index - 1 12 else: 13 Low_Index = Mid_Index + 1 14 return None
大O表示法
大O表示法是一种特殊的表示法,指出了算法的速度有多快。
e.g. 二分查找:O(logn)
简单查找:O(n)
理解不同的大O运行时间
算法1:
算法2:
算法1为O(n), 算法2为O(logn)
注:
大O表示法指出了最糟糕情况下的运行时间
还有平均情况也要考虑
一些常见的大O运行时间
O(log n),也叫对数时间,这样的算法包括二分查找。
O(n),也叫线性时间,这样的算法包括简单查找。
O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。
Reference:
《Grokking Algorithms》-Aditya Bhargava