python算法1-复杂度+递归+查找+排序+高精度+前缀和+双指针

介绍

算法:计算过程,解决问题的方法
程序=算法+数据结构(动态+静态)

时间复杂度

时间复杂度

原因:因为计算机的运行效率、事件处理的复杂度不同,不能精确的判断每个程序使用的时间,所以需要时间复杂度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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值