估算运行效率和时间复杂度
时间复杂度
时间复杂度o(1):o表示一个估值,1代表一个时间运行单位,这个值比较小
O(n):表示一层循环
O(n^2):表示两层循环
O(n^3):表示三层循环,并且依次类推
(1)时间复杂度:O(1),不涉及根本的变化,还是在一次方级别的
(2)时间复杂度为O(n^2)
这种的时间复杂度记为:O(log2n)或O(logn)
当算法过程出现循环折半的时候,复杂度式子中会出现logn
如何简单快速地判断算法复杂度
1.快速盘算算法复杂度(适用于绝大多数情况):
确定问题规模n
循环下班呐过程-logn
k层关于n的训话–n^k
2.复杂情况:根据算法执行过程判断
小结
1.时间复杂是用来估算算法运行时间的一个式子(单位)
2.一般来说,时间复杂度高的算法比复杂度低的算法满。
3.常见的时间复杂度(按照效率顺序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n^3)
4.复杂问题的时间复杂度
O(N!),O(2n),O(nn)
空间复杂度
空间复杂度:用来评估算法内存占用大小的式子
空间复杂度的标识方式与实践复杂度完全一样
算法使用了进个变量:O(1)
算法使用了长度为n的一维列表:O(n)
算法使用了m行n列的二位列表:O(mn)
“空间换时间”:宁可占用更多时间,也要让时间更快
递归方面:汉诺塔问题
def hanoi(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')