时间复杂度

时间复杂度

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的几次方,有减半的另算)

复杂情况:根据算法执行过程判断

 

posted @ 2021-03-25 09:07  测试技术  阅读(309)  评论(0)    收藏  举报