【发布时间】:2022-10-24 03:06:59
【问题描述】:
有人可以解释为什么这是O(n log n) 而不是O(n^2)?我的想法是 if 语句是 n 次,else 是 log n 所以你在这种情况下选择两者之间最坏的情况是 O(n) 所以将它与外循环相乘 O(n)让它O(n^2),但显然是O(n log n),我不知道怎么做。
for i in range( len(nums_lst)):
if i < 10:
for k in range( len(nums_lst)):
print(nums_lst[0])
else:
j = 1
while j < len(nums_lst):
print(nums_lst[0])
j *= 2
【问题讨论】:
-
O(n*n) 的最坏情况发生在 n=10 时;但与 n=100000 相比,当复杂度为 O(n*logn) 时,这可以忽略不计。
-
在计算时间复杂度时,我们只考虑贡献最大的项。随着 n 接近无穷大,O(n^2) 部分的贡献接近 0(相对于 O(n log n) 部分)。