介绍
算法:计算过程,解决问题的方法
程序=算法+数据结构(动态+静态)
时间复杂度
时间复杂度
原因:因为计算机的运行效率、事件处理的复杂度不同,不能精确的判断每个程序使用的时间,所以需要时间复杂度O()进行估算、比较快慢。
*比较量级(只要未达到质的变化)
O(logn):运算规模每次减半
常见的时间复杂度排序:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
快速判断时间复杂度
1、确定问题规模n
2、若有循环减半过程–>logn
3、k层关于n的循环–>nk
若情况复杂要根据代码的执行过程判断
递归与汉诺塔问题
递归特点
1、调用自身
2、结束条件
关注func3和func4:
若先调用递归再进行打印,则最开始传入的数据被压在最后打印
hanoi
hanoi函数编写的底层思路。函数是一种方法;递归则是多次调用方法。
`def hanoi(n,a,b,c):#将n个盘子从a通过b移动到c
if n>0:
hanoi(n-1,a,c,b)
print("moving from %s to %s "%(a,c))
hanoi(n-1,b,a,c)
hanoi(3,'A','B','C')
`
列表查找
内置列表查找函数:index()
str.index(substring, beg=0, end=len(string))
输入列表、带查找元素;输出元素下标(未找到时返回None或-1)
顺序查找(Linear Search)
# 线性搜索
def Linear_Search(li,val):#在列表li中查找元素val
for ind,v in enumerate(li):#enmerate同时获取元素和索引
if v == val:
return ind
else:
return None
# 测试
def main():
lst = ['a','b','c']
result = Linear_Search(lst,'c')
print(result)
main()
时间复杂度:O(n)
二分查找(Binary Search)
即折半查找;从有序列表的初始候选区li[0:n}开始,通过对待查找的值与中间值的比较。
内置列表排序函数:sort()
def Binary_Search(li