2.2 函式的漸近增長率
根據1.3節的定義,演算法的最壞情況時間複雜度是規模n的函式。由於n是乙個變數,這就給比較演算法的優劣帶來乙個問題:演算法1和演算法2在規模值n取不同值的時候,它們的優劣可能是不一樣的。常見的情況是,有一些複雜的演算法在小規模的時候無優勢甚至有劣勢,但是它們的優勢將在問題規模很大的時候顯現出來。我們在進行演算法分析的時候,更關心問題規模很大時演算法的表現。但是何謂規模大,對於不同的演算法而言又千差萬別。有的演算法可能在幾千的規模上就比同類演算法有優勢,而有的演算法可能需要到百萬級的規模才能顯現優勢。
正是針對演算法分析中的上述困難,我們引入函式的漸近增長率(asymptotic growth rate)概念,其中:
●增長率的概念使得我們集中關注演算法在規模較大時候的效能表現,它關注的不是代價函式的具體的值,而是代價函式的值隨規模增長的速度。因而不管開始的優劣如何,增長率較快的函式在面對大規模輸入的時候值會變得更大。
●漸近的概念幫我們處理了不同演算法對於 「大規模」的含義有不同解讀的問題,它關注的是問題規模趨於無窮時演算法代價的變化情況。
我們引入3組共5個不同的記號來描述函式的漸近增長率之間的關係,它們是o和o 、ω 和ω 、θ。我們首先給出使用極限語言的定義,在此基礎上給出基於求極限的判別方法。在這3組記號中,o和o的定義是基礎,這兩個符號之間的差別是理解其定義的重點。首先給出這兩個記號的定義。
定義2.2(f(n)=o(g(n)))
●o(g(n)) =。
●f(n)=o(g(n)) iff limn→∞f(n)g(n)=c<∞。
定義2.3(f(n)=o(g(n)))
●o(g(n)) =。
●f(n)=ω(g(n)) iff limn→∞f(n)g(n)=c>0(c也可以為∞)。
定義2.5(f(n)=ω(g(n)))
●ω(g(n)) =。
●f(n)=θ(g(n)) iff limn→∞f(n)g(n)=c,這裡 0根據上述定義,我們很容易驗證:
●o、ω、θ、o、ω這5種關係均滿足傳遞性。
●o、ω、θ這3種關係滿足自反性。
●θ是乙個等價關係。
●f(n)=θ(g(n)) iff f(n)=o(g(n))且f(n)=ω(g(n))。
●o、 o和ω、ω之間有一種對偶的關係,即f=o(g) iff g=ω(f),f=o(g) iff g=ω(f)。
這些性質的證明留作習題。
《演算法設計與分析》一一1 3 抽象演算法分析
1.3 抽象演算法分析 面對乙個演算法問題,當我們已經為之設計乙個正確演算法的時候,下乙個關鍵問題就是分析所設計的演算法是否高效。為此,首先需要針對抽象演算法設計的特點,討論抽象演算法的效能指標。以此為基礎,進一步討論演算法的最壞情況和平均情況複雜度分析。1.3.1 抽象演算法的效能指標 演算法效能...
演算法分析與設計2 2Dijkstra演算法
對於下圖使用dijkstra演算法求由頂點a到頂點h的最短路徑 1 將圖中的a,b,h與1,2 8相對應,便於編寫 2 將起點到所有點的距離儲存在一維陣列中,並找出其中距離最近的點 3 將 2 中找到的點作為中間點,判斷距離是否會會更近,若更近則更新距離 4 重複 2 3 void dijkstra...
演算法設計與分析
輸入輸出 確定性有窮性 np類問題是非確定性計算模型下的易驗證問題類。所有可以在多項式時間內求解的判定問題構成p類問題 1 二分搜尋技術 二分搜尋演算法的基本思路是對給定已排好序的n個元素a 0 n 1 在這n個元素中找出乙個特定元素x。運用分治的思想,將n個元素以n 2為中心對半分。if x a ...