ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-23 11:55:12  阅读:169  来源: 互联网

标签:Index Python 简介 中位数 表示法 算法 查找 数组


该系列博客的内容均为阅读《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

标签:Index,Python,简介,中位数,表示法,算法,查找,数组
来源: https://www.cnblogs.com/hungry5656/p/11072188.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有