python - 具有嵌套循环的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
谢谢。
解决方案
首先,根据大 O 表示法O(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)//3 + 1) :
for j in range(i * 3, (n ** 3) + 1):
k += 1
这显然是O(n^6)
均匀的θ(n^6)
(大 Theta)。
您可以k
更直接地计算,但我想k += 1
这里只是一个占位符。
推荐阅读
- java - 使用Java创建注册表并将其与在线数据库连接
- css - 顺风将一个 div 放在另一个 div 网格的底部
- excel - 提取保存公式的工作簿名称,而不是当前使用的工作簿名称
- sql-server - SQL Server 加入查找表
- java - 并行矩阵乘法
- azure - Azure Application Insights - 禁用日志记录页面视图
- excel - 添加新列然后将单元格更改为时间格式的Vba宏
- parsing - 使用自定义分隔符进行 Haskell 日期解析
- apache-spark - 在 PySpark UDF 中使用 StructType 列
- workflow - Uber Cadence 工作流程版本控制