python之算法
Posted 。。。’
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之算法相关的知识,希望对你有一定的参考价值。
1.什么叫算法
算法:可以理解为是解决问题方法的一个计算过程。
2.时间复杂度
用来评估算法运行效率的一个东西。时间复杂度常用大O符号表述,如O(1)。
n = 10 print(\'Hello World\') # 时间复杂度:O(1) ---------------------------------------------------------------- for i in range(n): print(\'Hello World\') # 时间复杂度:O(n) ---------------------------------------------------------------- for i in range(n): for j in range(n): print(\'Hello World\') # 时间复杂度:O(n^2) ---------------------------------------------------------------- for i in range(n): print(\'Hello World\') for j in range(n): print(\'Hello World\') # 时间复杂度:O(n^2) ---------------------------------------------------------------- for i in range(n): for j in range(m): print(\'Hello World\') # 时间复杂度:O(n^2) ---------------------------------------------------------------- for i in range(n): for j in range(n): for k in range(n): print(\'Hello World\') # 时间复杂度:O(n^3) ---------------------------------------------------------------- print(\'Hello Yesterday\') print(\'Hello Tomorrow\') print(\'Hello Today\') # 时间复杂度:O(1)
注意:如果快速判断出时间复杂度?
1.循坏减半的过程---->O(logn)
2.有几次循环,时间复杂度就是n的几次方。
3.空间复杂度
用来评估算法内存占用大小的一个式子。
1.冒泡排序法
思路:① 列表每两个相邻的数,如果前边的数比后边的数大,那=那么就换两个数的位置。
def Bubble_sort(li): for i in range(len(li) - 1): for j in range(len(li) - 1 - i): if li[j] > li[j+1]: # 判断前面一个数字是否大于后面的数字 li[j], li[j+1] = li[j+1], li[j] # 转换两数字之间的位置,将大的数字放后面 li = [1,4,7,2,5,8,3,6,9] Bubble(li) print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
2.选择排序法
思路:① 先把列表中所有数走一趟,记录下最小的数并放置的第一个位置。
② 再把列表中剩余的数遍历走一趟,记录下最小的数,继续放置。
def select_sort(li): for i in range(len(li)): minIndex = i # 记录最小数的索引 for j in range(i+1,len(li)): if li[j] < li[minIndex]: # 判断两个索引代表数的大小 minIndex = j if i != minIndex: # 当i不是最小索引时,将i和最小索引进行交换 li[i], li[minIndex] = li[minIndex],li[i]
3.插入排序法
思路:① 将列表被分为有序区和无序区。最开始的有序区只有首位元素。
② 每次从无序区抽取一个元素插入到有序区的位置,并对其进行大小比较及排序,直至有序区变空。
def insert_sort(li): for i in range(1, len(li)): # 以第二个作为无序代码的开端 tmp = li[i] # 索引 i 对应的值 j = i - 1 # 索引 J 为索引 i 的前一位索引 while j >= 0 and tmp < li[j]: # 判断索引 i 和索引 J 对应值的大小 li[j + 1] = li[j] j = j - 1 li[j + 1] = tmp li = [4, 1, 7, 2, 5, 8, 3, 6, 9, 10] insert_sort(li) print(li)
4.快速排序法
思路:① 取一个元素P(一般取第一个元素),使元素P归位。
② 列表被P分为两部分,左边都比P小,右边都比P大。
③ 递归完成剩余的排序。
def quick_sort(li, left, right): if left < right: mid = partition(li, left, right) quick_sort(li, left, mid-1) quick_sort(li, mid + 1, right) def partition(li, left, right): tmp = li[left] while left < right : # left, right 代表的是索引大小 while left < right and li[right] >= tmp: right -= 1 li[left] = li[right] while left < right and li[left] <= tmp: left += 1 li[right] = li[left] li[left] = tmp return left li = [4,1,7,2,5,8,3,6,9] quick_sort(li, 0, len(li)-1) # 如果不减一,索引会超 print(li)
以上是关于python之算法的主要内容,如果未能解决你的问题,请参考以下文章
有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]