我正在尝试理解Big-O表示法,因此我使用while循环为O(n)创建了自己的示例,因为我发现while循环有点令人困惑,无法理解Big O表示法。我定义了一个名为linear_example的函数,它接受一个列表,例子是python:
所以我的代码是:
def linear_example (l):
n =10
while n>1:
n -= 1
for i in l:
print(i)
我的思维过程是for循环中的代码以恒定时间O(1)运行 并且while循环中的代码在O(n)时间内运行。 因此,它将是O(1)+ O(n),它将评估为O(n)。
反馈
答案 0 :(得分:3)
想一个简单的for循环:
for i in l:
print(i)
这将是O(n),因为你在列表中迭代,因为l中存在很多项。 (其中n == len(l))
现在我们添加一个while循环,它执行十次相同的操作,所以:
n + n + ... + n(x10)
复杂度为O(10n)。
由于这仍然是一阶多项式,我们可以将其简化为O(n),是的。
答案 1 :(得分:0)
不完全。首先,n
不是固定值,因此 O(n)毫无意义。让我们假设给定值M
,改变前两行:
def linear_example (l, M):
n = M
for
循环中的代码确实在 O(1)时间运行,前提是i
的每个元素l
具有有限的有界打印时间。但是,循环迭代len(l)
次,因此循环复杂度为 O(len(l))。
现在,对于n
循环中的while
的每个值,该循环将完全运行一次,总共M
次。因此,复杂性是循环复杂性的产品: O(M * len(l))。