功能的大O

时间:2018-05-02 22:29:03

标签: python big-o

我正在尝试理解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)。

反馈

2 个答案:

答案 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))