1. 程式人生 > >演算法分析基礎---漸進複雜度

演算法分析基礎---漸進複雜度

Notation Name[13] Description Formal Definition Limit Definition[16][17][18][13][11]
f(n)=o(g(n)) Small O; Small Oh f is dominated by g asymptotically \forall k>0\;\exists n_{0}\;\forall n>n_{0}\;|f(n)|\leq k\cdot |g(n)| {\displaystyle \lim _{n\to \infty }{\frac {f(n)}{g(n)}}=0}
f(n)=O(g(n)) Big O; Big Oh; Big Omicron |f| is bounded above by g (up to constant factor) asymptotically {\displaystyle \exists k>0\;\exists n_{0}\;\forall n>n_{0}\;|f(n)|\leq k\cdot g(n)} {\displaystyle \limsup _{n\to \infty }{\frac {\left|f(n)\right|}{g(n)}}<\infty }
f(n)=\Theta (g(n)) Big Theta f is bounded both above and below by gasymptotically \exists k_{1}>0\;\exists k_{2}>0\;\exists n_{0}\;\forall n>n_{0}k_{1}\cdot g(n)\leq f(n)\leq k_{2}\cdot g(n) f(n)=O(g(n)) and f(n)=\Omega (g(n))(Knuth version)
{\displaystyle f(n)\sim g(n)} On the order of f is equal to g asymptotically \forall \varepsilon >0\;\exists n_{0}\;\forall n>n_{0}\;\left|{f(n) \over g(n)}-1\right|<\varepsilon {\displaystyle \lim _{n\to \infty }{f(n) \over g(n)}=1}
f(n)=\Omega (g(n)) Big Omega in number theory (Hardy-Littlewood) |f| is not dominated by g asymptotically {\displaystyle \exists k>0\;\forall n_{0}\;\exists n>n_{0}\;|f(n)|\geq k\cdot g(n)} {\displaystyle \limsup _{n\to \infty }\left|{\frac {f(n)}{g(n)}}\right|>0}
f(n)=\Omega (g(n)) Big Omega in complexity theory (Knuth) f is bounded below by g asymptotically \exists k>0\;\exists n_{0}\;\forall n>n_{0}\;f(n)\geq k\cdot g(n) {\displaystyle \liminf _{n\to \infty }{\frac {f(n)}{g(n)}}>0}
f(n)=\omega (g(n)) Small Omega f dominates g asymptotically \forall k>0\;\exists n_{0}\;\forall n>n_{0}\ |f(n)|\geq k\cdot |g(n)|
{\displaystyle \lim _{n\to \infty }\left|{\frac {f(n)}{g(n)}}\right|=\infty }
1、簡單來說,big-O表示的是上界,big-Theta表示的是漸進緊確界,big-Omega表示的是下界。

2、(1)Θ(西塔):緊確界。            相當於"="

(2)O (大歐):上界。              相當於"<="

(3)o(小歐):非緊的上界。       相當於"<"

(4)Ω(大歐米伽):下界。          相當於">="

(5)ω(小歐米伽):非緊的下界。 相當於">"

3、o(f)\subset O(f) (and thus the above properties apply with most combinations of o and O).

4、

  1. T(n) = O(n100)
  2. T(n) = O(n3)
  3. T(n) = Θ(n3)

The equivalent English statements are respectively:

  1. T(n) grows asymptotically no faster than n100
  2. T(n) grows asymptotically no faster than n3
  3. T(n) grows asymptotically as fast as n3.

相關推薦

演算法分析基礎---漸進複雜

Notation Name[13] Description Formal Definition Limit Definition[16][17][18][13][11] Small O; Small Oh  is dominated by  asympt

演算法分析(時間複雜和空間複雜

演算法分析(時間複雜度和空間複雜度) 對於一個給定的演算法需要做兩項分析,第一就是證明演算法的正確性,第二就是計算演算法的複雜度。演算法的複雜度包括時間複雜度和空間複雜度。 1  度量演算法效率的方法 共存在兩種方法:事後統計法和事前分析估計演算法。 事後統計法:先將演算法實現,然

演算法分析之時間複雜與空間複雜

演算法的評價指標主要是正確性,健壯性、可讀性和有效性4個方面,有效性又包括時間複雜度和空間複雜度。 演算法的時間複雜度和空間複雜度通常採用數量級的形式來表示,而數量的形式有常量階、對數階、線性階、線性對數階、平方階、立方階、指數階、階乘階等。若演算法的時間複雜度和空間複雜度

資料結構和演算法分析學習筆記——複雜分析

複雜度分析 本文只是我的個人學習筆記,用於記錄資料結構和演算法的學習總結。 如何得到演算法的執行效率? 事後統計 方式:直接在裝置上執行得到結果 缺點:測試結果受測試環境和測試資料規模影響

演算法分析神器—時間複雜

時間複雜度是學習演算法的基石,今天我們來聊聊為什麼要引入時間複雜度,什麼是時間複雜度以及如何去算一個演算法的時間複雜度 刻畫演算法的執行時間 某日,克叫來了慧子打算給他補習補習一下基礎知識,只見克寫了一段非常簡單的程式碼 克 你說一下這段程式碼會執行多長時間

資料結構與演算法分析 —— 漸進複雜(三個記號)

對於某些問題,一些演算法更適合於用小規模的輸入,而另一些則相反。幸運的是,在評價演算法執行效率時,我們往往可以忽略掉其處理小規模問題時的能力差異,轉而關注其在處理大規模資料時的表現。道理是顯見的,處理大規模的問題時,效率的些許差異都將對實際執行效率產生巨大的影響

資料結構與演算法學習筆記之 複雜分析

前言:   大家都知道資料結構和英語,就如同程式設計師的兩條腿一樣;只有不斷的積累,學習,擁有了健壯的“雙腿”才能越走越遠;在資料結構和演算法的領域,不得不承認自己就是一隻菜鳥;需要不斷的學習;在學習過程中,經常會有一些自己的看法,和別人獨特的見解;我都會一一做好筆記,以便進步; 正文:複雜度分析

資料結構與演算法(一)——複雜分析(上)

資料結構與演算法(一)—— 複雜度分析(上) 基礎知識就像是一座大樓的地基,只有打好基礎,才能造成萬丈高樓。資料結構與演算法是一個程式設計師的內功,只有基礎足夠紮實,才能有效提高自己的技術能力,寫出更高效、擴充套件性更好的優秀程式碼。寫這個系列記錄一下自己學習的

KMP演算法介紹及時間複雜分析

概念:字串中 一個字元前面的字串 的字首與字尾的最長匹配長度(短的那個字串) 注意:字首與字尾不可以是整個子字串 例如:a b c a b c d , d位置的最長匹配長度為3,abc 與 abc 匹配 Next陣列:長度與字串長度一致,每個位置儲存對應字元的最長匹配長

資料結構與演算法(二)——複雜分析(下)

資料結構與演算法(二)—— 複雜度分析(下) 除了前面記錄的複雜度的基礎知識,還有四個複雜度分析方面的知識點:最好情況時間複雜度、最壞情況時間複雜度、平均情況時間複雜度、均攤時間複雜度。 一、最好、最壞情況時間複雜度 最好情況時間複雜度,就是在最理想的情況下,

八大排序演算法及時間空間複雜分析,java版

//放在一起感覺又臭又長,所以每排序我單獨放出來了,歡迎大家平均交流指出不足import java.lang.reflect.Array;import java.util.*;public class EightKindOfSort {/*選擇排序    (不穩定演算法) *

常用排序演算法穩定性、時間複雜分析

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

淺談直接插入排序演算法思想以及時間複雜分析

研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相

排序演算法 (穩定性時間複雜分析

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

演算法 歸併排序的複雜分析(含圖解流程和Master公式)

圖解流程 整體流程如下: 細節流程: 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步:

重拾演算法(一):演算法效率分析(空間複雜和時間複雜

前言: 演算法效率分析分為兩種:第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。 時間複雜度主要衡量的是一個演算法的執行速度,而空間複雜度主要衡量一個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜

為什麼演算法漸進複雜中對數的底數總為2

在分析各種演算法時,經常看到O(log2n)O(log2⁡n)或O(nlog2n)O(nlog2⁡n)這樣的漸進複雜度。不知有沒有同學困惑過,為什麼演算法的漸進複雜度中的對數都是以2為底?為什麼沒有見過O(nlog3n)O(nlog3⁡n)這樣的漸進複雜度?本文解釋這個問

斐波那契數列遞迴演算法和非遞迴演算法以及其時間複雜分析

1、在學習資料結構這門課的過程中,發現斐波那契數列的遞迴演算法以及非遞迴演算法,以及其時間複雜度分析是一個小難點。所以特別總結一下。 斐波那契數列的表示式: Fibonacci數列簡介: F(1)=

演算法 時間和空間複雜的簡單理解小述

一、概述 本節主要簡單分析下演算法的時間、空間複雜度,並不會涉及公式的推倒,主要以能用能理解為主,因為我自己也是一個門外漢,想深入的總結也是心有餘而力不足。 二、分析 當一個問題的演算法被確定以後,那麼接下來最重要的當然是評估一下該演算法使用的時間和佔用記憶體資源的相關問題了

常用排序演算法中的時間複雜和空間複雜

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 不穩定