二分法查找算法的时间复杂度,python 二分查找函数
时间复杂度
时间复杂度是一个用来估计算法运行时间的公式(单位)。
一般来说,时间复杂度高的算法比复杂度低的算法慢。
常见时间复杂度(按效率排序)
O(1) O(对数n) O(n) O(n对数n) O(n 2) O(n 2对数n) O(n 3)
不寻常的时间复杂度(看看就知道了)
n不(n!)O(2 n) O(n n) …
如何一眼判断时间复杂度?
将周期减半的过程
周期数是n的幂的复杂度。
空间复杂性
空间复杂度:用于评估算法内存占用的公式。
“空间换时间”
河内塔问题
梵天创造世界的时候做了三根钻石柱子,柱子上自下而上叠放了64个黄金圆盘。
梵天命令hldxd按照大小的顺序从下往上重新排列另一列的盘面。
不能在小盘上放大盘。一次只能在三列之间移动一个磁盘。
当64根柱子被移动时,世界将被毁灭。
河内国防大学:
如果n 0:
河内(n-1,A,C,B)
打印( %s-%s % (A,C))
河内(n-1,B,A,C)
河内(5, A , B , C )
#h(n)=2h(n-1) 1
#h(1)=1
递归面试问题,善良的老虎
由n级台阶组成的楼梯,真诚的目光从楼梯底部向顶部移动,可以选择一次走一级台阶,也可以选择两步。问:他有多少种不同的走路方式?
#善良的老虎系列
f(n)=f(n-1) f(n-2)
从系统导入setrecursionlimit
从校准时间导入校准时间
setrecursionlimit(1000)
# O(2^n)
# f(n)=f(n-1) f(n-2)
#当问题的解决方案依赖于其子问题的解决方案时
定义纤维(n):
如果n==0或n==1:
返回1
否则:
返回光纤(n-1)光纤(n-2)
# O(n)
定义fib2(n):
李=[1,1]
对于范围(2,n ^ 1)中的I:
li.append(li[-1] li[-2])
返回李[-1]
定义fib3(n):
li=[-1表示范围(n ^ 1)中的I]
定义纤维(n):
如果n==0或n==1:
返回1
elif li[n]=0:
返回李[n]
否则:
v=fib(n-1) fib(n-2)
李,李
返回李[n]
返回光纤(n)
# 1 2
# O(n)
定义纤维4(n):
a=1
b=1
c=1
对于范围(2,n ^ 1)中的I:
c=a b
a=b
b=c
返回c
@cal_time
def fibnacci(n):
返回fib4(n)
打印(fibnacci(400))
列表查找
列表搜索:从列表中查找指定的元素。
输入:列表,要查找的元素
输出:未找到元素下标或元素。
顺序查找于
从列表中的第一个元素开始,按顺序搜索,直到找到为止。
二分搜索法日志
从有序列表的候选区域数据[0:n]开始,通过比较要搜索的值和候选区域的中间值,可以将候选区域缩小一半。
二进位检索
从校准时间导入校准时间
#时间复杂度:log n
def fdwsary_search(li,val):
低=0
高=len(li)-1
While low=high: #只要候选区域有值
mid=(低高)//2
if val==li[mid]:
返回mid
elif val li[mid]:
高=中间1
else: # val li[mid]
低=中1
返回-1
#递归和迭代
#通常,递归会很慢
#尾部递归:编译器将优化迭代,但Python没有针对尾部递归进行优化。
def fdws_search_rec(数据集,值,低,高):
如果低=高:
mid=(低高)//2
if data_set[mid]==value:
返回mid
elif data_set[mid]值:
返回fdws_search_rec(数据集,值,低,中1)
否则:
返回fdws_search_rec(数据集,值,中1,高)
否则:
返回
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。