带有嵌套循环的python函数的时间复杂度

问题描述

为什么是O(n ^ 6)?而不是O(n ^ 9)?

def fa1(n):
    k = 0
    for i in range(1,(n ** 6) + 1) :
        for j in range(i * 3,(n ** 3) + 1):
            k += 1

谢谢。

解决方法

首先,通过定义big O notationO(n^6)的计算也是O(n^9)n >= 0)。后者只是一个较差的近似值。

第二,如果您这样重写函数,那就太简单了:

def fa1(n):
    k = 0
    for i in range(1,((n ** 3) + 1)//3 + 1) :
        for j in range(i * 3,(n ** 3) + 1):
            k += 1

    for i in range(((n ** 3) + 1)//3 + 1,(n ** 6) + 1) :
        for j in range(i * 3,(n ** 3) + 1):
            k += 1

第二个循环始终为i * 3 >= (n ** 3) + 1,因此跳过内部循环,因为range为空。因此,该功能等效于:

def fa1(n):
    k = 0
    for i in range(1,(n ** 3) + 1):
            k += 1

这显然是O(n^6)甚至是θ(n^6)(大Theta)。

您可以更直接地计算k,但我想k += 1只是一个占位符。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...