python - 如何使用 while + for 循环计算 Big O
问题描述
我得到了以下代码,并被告知 func 函数的 Big O 是 Big O (n^2)。我相信它是 Big O(n),因为它应该是 Big O(n + n),我错了吗?
what is Big O of following func?
nums = list(range(1, 11))
K = 4
def func(nums: list, K:int):
i, end = 0, len(nums)
res = []
x = []
while i < end:
res.append(nums[i:i+K])
i += K
for i in res:
x += i[::-1]
return x
func(nums, K)
解决方案
该函数将是 O(n)。第一个 while 循环的迭代次数少于n
次数,因为它的上限是n
( end
),并且每次迭代计数器的增量都超过 1。
for 循环遍历res
,它是 的子集nums
。由于它是一个子集,它不会迭代超过n
多次,使其成为 O(n)。
O(n) + O(n) = O(n),所以你的评估是正确的。
推荐阅读
- angular - “(TS)找不到@angular/core ...”Asp.NET Core Angular项目错误
- reactjs - 单击链接时如何关闭侧边栏?
- javascript - 需要与导入
- r - 如何使用 readLines 和 R 中的循环从多个 (435) 网页获取信息?
- react-native - React Navigation 5.x 中的任务:react-native-screens:javaPreCompileDebug 错误
- python - “如何解决 'HTTP 403: Forbidden' 错误?”
- html - 应用背景滤镜:blur(); 到 SVG 路径
- java - 从头开始赢
- javascript - 将 div 元素的高度锁定为其子元素的大小
- c# - HtmlAgilityPack - 删除所有属性