大o表示法

2021-09-17 04:21:27 字數 1524 閱讀 5417

下面是一些常用的時間複雜度以及簡單的定義

o(1)— 常量時間

o(1)表示該演算法的執行時間(或執行時占用空間)總是為乙個常量,不論輸入的資料集是大是小。

bool isfirstelementnull(ilistelements)

o(n)

o(n)表示乙個演算法的效能會隨著輸入資料的大小變化而線性變化。下面的例子同時也表明了大o表示法其實是用來描述乙個演算法的最差情況的:在for迴圈中,一旦程式找到了輸入資料中與第二個傳入的string匹配時,程式就會提前退出,然而大o表示法卻總是假定程式會執行到最差情況(在這個例子中,意味著大o會表示程式全部迴圈完成時的效能)。

bool containsvalue(ilistelements, string value)

return false;

}​```

o(n^2)

o(n^2)表示乙個演算法的效能將會隨著輸入資料的增長而呈現出二次增長。最常見的演算法就是對輸入資料進行巢狀迴圈。如果巢狀層級不斷深入的話,演算法的效能將會變為o(n3),o(n4),以此類推。

o(n²)— 二次方時間

for迴圈巢狀的複雜度就是二次方的,因為你在乙個線性操作裡執行另外乙個線性操作(或者說: n*n =n² )

bool containsduplicates(ilistelements)

}return false;

}

o(2^n)

o(2n)表示乙個演算法的效能將會隨著輸入資料的每次增加而增大兩倍。o(2n)的增長曲線是一條**式增長曲線——開始時較為平滑,但資料增長後曲線增長非常陡峭。乙個典型的o(2^n)方法就是裴波那契數列的遞迴計算實現。

int fibonacci(int number)

o(log n)對數

要說明對數情況,稍稍有點複雜,因此我將使用乙個非常通用的示例:

二分查詢是一種用來在有序集合中進行查詢的高效演算法。二分查詢從資料集的中間位置開始,然後用這個中間值和乙個目標值進行比較。如果比較結果為相等,則程式返回成功。如果目標值大於中間值,程式會擷取從中間值開始到最大值的那段資料集,並重複執行同樣的查詢方法。想死的,如果目標值小於中間值,程式將會繼續在資料集中較小的那一半執行二分查詢。二分查詢程式會持續的將資料集對等分,以進入下一次迴圈,直到最終找到與目標值相等的資料後,程式就退出。

這類演算法的效能就會被描述為o(logn)。正是通過這種不斷對資料進行對等分的二分查詢操作,使得二分查詢演算法的曲線從乙個峰值開始,隨著輸入資料集的增長而慢慢的變得平緩。用例子來說明的話,例如乙個包含10個輸入資料的程式需要耗時一秒完成,則乙個包含100個輸入資料的程式就需要耗時兩秒,然後乙個包含1000個輸入資料的程式就耗時三秒。加倍的輸入資料對這類演算法的效能結果影響非常小。基於如此,類似於二分查詢的對數級演算法在處理大量資料集時非常高效。

大O表示法

用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。大o表示法 稱乙個函式g n 是o f n 當且僅當存在常數c 0和n0 1對一切n n0均有 g n c f n 成立,也稱函式g n 以f n 為界或者稱g n 受限於f n 記作g n o f n 定義 如果乙個問題的規模是n,解這一...

大O表示法

大o表示法 汽交按尺寸被分為若干類 微型 小型 中型等等。在不提及具體尺寸的情況下,這些分類可以為我們所涉及到車的大小提供乙個大致慨念。我們同樣也需要一種快捷的方法來評價計算機演算法的效率,在電腦科學中,這種粗略的度量方法被稱作 大o 表示法。在比較演算法時似乎應該說一些類似 演算法a比演算法b快兩...

大O表示法

概念 大o表示法是和資料項的個數相關聯的粗略度量演算法時間複雜度的快捷方法。常數 乙個無序可重複陣列插入乙個資料項的時間t是常數k,常數k表示一次插入所花費的時間,包含cpu 編譯器等工作時間。可表示為 t k 線性查詢 從陣列中線性查詢乙個資料項平均需要n 2步,每步所花費的時間為k 可表示為 t...