Python 基础算法(1) - 算法简介

该系列博客的内容均为阅读《Grokking Algorithms》(Aditya Bhargava)的心得or笔记or总结

image

 

那么我们就直接进入正题吧

 

简单查找

这个算法应该是最普通的算法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运行时间

image

算法1:

image

算法2:

image

image

image

算法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

posted @ 2019-06-23 11:37  hungry5656  阅读(249)  评论(0编辑  收藏  举报