簡體   English   中英

我的功能的大O

[英]Big-O of my function

我試圖理解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)time中運行。 因此,存在O(1)+ O(n),其結果為O(n)。

反饋?

考慮一個簡單的for循環:

for i in l:
    print(i)

這是O(n),因為您要遍歷列表以查找l中存在的許多項。 (其中n == len(l))

現在,我們添加一個while循環,該循環執行相同的操作十次,因此:

n + n + ... + n(x10)

復雜度為O(10n)。

由於這仍然是一階多項式,因此我們可以將其簡化為O(n),是的。

不完全的。 首先, n不是固定值,因此O(n)是沒有意義的。 讓我們為此假設一個給定的值M ,更改前兩行:

def linear_example (l, M):
    n = M

只要l每個元素i具有有限的打印時間, for循環中的代碼就可以在O(1)時間中運行。 但是,循環迭代len(l)次,因此循環復雜度為O(len(l))

現在,循環運行一次完全穿過的每個值nwhile循環,共M次。 因此,復雜度是循環復雜度的乘積O(M * len(l))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM