时间复杂度
时间复杂度
print("Hello World) O(1) 执行一次,一次打印,一次计算都算1
for i in range(n):
print("Hello World) O(n) 执行n次,时间复杂度就是n
for i in range(n):
for j in range(n):
print("Hello World) O(n²) 两层循环,时间复杂度就是n²
for i in range(n):
for j in range(n):
for k in range(n):
print("Hello World) O(n³) 三层循环,时间复杂度就是n³
注意:1,
print("Hello World)
print("Hello World)
print("Hello World) 错误答案:O(3) 打印了3次,时间复杂度就是3 正确答案:O(1) 解析:1是一个单位,n是一个单位,只要没有数量级的上升就是O(1)
for i in range(n):
print("HelloWorld)
for j in range(n):
print("Hello World) 错误答案:O(n²+n) 这里要特别注意下双层循环多加了一个print,这个print就多了第一层的循环,所以时间复杂度是n² +n 正确答案:O(n²) 解析:n是一个单位,多一个n 不至于数量级的上升,时间复杂度只是一个大概,生活中我们如果按照小时计算时间的时候通常会忽略分钟,因为分钟相比与小时不构成数量级的影响
while n>1:
print(n)
n=n//2
详解:26=64 Log264=6 n=64的时候打印的次数就是6
liucif执行了6次,时间复杂度以对数来表示 O(logn),当算法出现循环减半的时候就是logn,只要出现折半的情况就是logn
小结
时间复杂度是用来估算运行时间的一个式子(单位)
一般来说,时间复杂度高的算法比复杂度低的算法慢
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n²logn)<O(n³)
快速判断算法复杂度:
确定问题规模n(循环次数,列表长度)
循环减半过程->logn(看是不是有折半的过程)
K层关于n的循环->nk(有几层循环,就是n的几次方,有减半的另算)
复杂情况:根据算法执行过程判断

浙公网安备 33010602011771号