算法
发布时间:2019-10-29 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了几个简单的算法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一、时间复杂度
1.用来评估算法运行效率的一个东西。
2.一般来说,时间复杂度高的算法比复杂度低的算法慢
3.常见的时间复杂度(效率排序)
o@R_262_11269@
4.不常见的时间复杂度
o(n!)/o(2^n)/o(n^n)
5.如何一眼判断时间复杂度?
-循环的过程中出现了循环减半-----o(logn)
-几次n的循环就是n的几次方的复杂度
二、空间复杂度
1.空间复杂度:用来评估算法内存占用大小的一个式子
2."空间换时间"
三、递归
1、递归的两个特点:
-调用自身
-有结束条件
四、列表查找
1.列表查找:从列表中查找指定元素
-输入:列表、待查找元素。->无序列表
-输出:元素下标或未查找到元素。有序列表
title="几个简单的算法" alt="几个简单的算法" src="https://cn.js-code.com/res/2019/02-25/18/40f50b5fcbccce9214be34b44c9ed8fe.png" >
2.顺序查找
-从列表第一个元素开始,顺序进行搜索,知道找到为止
3.二分查找
-从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
li = list(range(0,1000,2))
value):
value):
low == len(li)-1
low <== (low+high)//2
data_set[mid] == data_set[mid] >= mid-1
= mid+1 else: return None
low<== (low+high)//2
data_set[mid]== data_set[mid]> bin_search_rec(data_set,mid-1 bin_search_rec(data_set,mid+1
4.汉诺塔问题
C):
n>-1(%C))
hanota(n-1C)
1个圆盘从A经过C移动到B
2.把第n个圆盘从A移动到C
3.把n-1个小圆盘从B经过A移动到C
汉诺塔移动次数的递归式:h(X) = 2h(x-1)+1
五、排序方法
1.冒泡排序
i range(len(li)-1 j range(len(li)-i-1 lI[j]>lI[j+1I[j],lI[j+1] = lI[j+1I[j]
<span style="color: #800000">"""
<span style="color: #800000">
优化
<span style="color: #800000">"""
<span style="color: #0000ff">def<span style="color: #000000"> bubble_sort_1(li):
<span style="color: #0000ff">for i <span style="color: #0000ff">in range(len(li)-1<span style="color: #000000">):
exchange =<span style="color: #000000"> false
<span style="color: #0000ff">for j <span style="color: #0000ff">in range(len(li)-i-1<span style="color: #000000">):
<span style="color: #0000ff">if l
I[j]>l
I[j+1<span style="color: #000000">]:
l
I[j],l
I[j]
exchange =<span style="color: #000000"> True
<span style="color: #0000ff">if <span style="color: #0000ff">not<span style="color: #000000"> exchange:
<span style="color: #0000ff">return
2.选择排序
SELEct_sort(li):
i range(len(li)-1= j range(i+1 lI[j]<I[min_loc]:
min_loc = min_loc ! =I[i],lI[min_loc]=I[min_loc],lI[i]
3.插入排序
i range(1=I[i]
j = i-1
j>=0 tmp<I[j]:
lI[j+1]=I[j]
j=j-1I[j+1]=
4.快速排序
left <=-1+1= left< left data[right] >=-=1= left data[left]<=+=1== left
5.堆排序
== 2*2+1
j<= j data[j]+=1
tmp <=== 2*i+1
== i range(n//2-1,-1,-1-1 i range(n-1,-1[0],data[i] =[0]
sift(data,i-1)
#python内置排序--heapq
-heapify(X)
-heappush(heap,item)
-heappop(heap)
优先队列:一些元素的集合,pop操作每次执行都会从优先队列中弹出最大(或最小)的元素
堆---优先队列
= value value)
[heappop(h) i range(len(h))]
#Top-k问题
=I[0:k]
i range(k//2-1,-1-1 i [0] =I[i]
sift(heap,k-1 i range(k-1,-1[0],heap[i] =[0]
sift(heap,i-1)
6.归并排序
== mid+1= i <=mid j <= lI[i]<=I[j]:
ltmp.append(lI[i])
i+=1
I[j])
j+=1
i <=I[i])
i+=1
j<=I[j])
j+=1I[low:high+1] =
low<= (low+high)//2
大佬总结
以上是大佬教程为你收集整理的几个简单的算法全部内容,希望文章能够帮你解决几个简单的算法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。