決策樹 排序問題的計算複雜性

2021-04-28 07:11:53 字數 2212 閱讀 2178

對排序演算法計算時間的分析可以遵循若干種不同的準則,通常以排序過程所需要的演算法步數作為度量,有時也以排序過程中所作的鍵比較次數作為度量。特別是當作一次鍵比較需要較長時間,例如,當鍵是較長的字串時,常以鍵比較次數作為排序演算法計算時間複雜性的度量。當排序時需要移動記錄,且記錄都很大時,還應該考慮記錄的移動次數。究竟採用哪種度量方法比較合適要根據具體情況而定。在下面的討論中我們主要考慮用比較的次數作為複雜性的度量。

為了對有n個元素的線性表進行排序,至少必須掃瞄線性表一遍以獲取這n個元素的資訊,因此排序問題的計算複雜性下界為ω(n)。

如果我們對輸入的資料不做任何要求,我們所能獲得的唯一資訊就是各個元素的具體的值,我們僅能通過比較來確定輸入序列1,a2,..,an>的元素間次序。即給定兩個元素ai和aj,通過測試ai

j,ai≤aj

,ai=aj ,ai≥aj ,ai>aj 中的哪乙個成立來確定ai和aj間的相對次序。這樣的排序演算法稱為比較排序演算法。下面我們討論一下比較排序演算法在最壞情況下至少需要多少次比較,即比較排序演算法的最壞情況複雜性下界。

我們假設每次比較只測試ai≤aj ,如果ai≤aj 成立則ai排在aj 前面,否則ai排在aj 後面。任何乙個比較排序演算法可以描述為一串比較序列:

(ai,aj),(ak,al),..,(am,an),...

表示我們首先比較(ai,aj),然後比較(ak,al),...,比較(am,an),...,直到我們獲取了足夠的資訊可以確定所有元素的順序。顯而易見,如果我們對所有的元素兩兩進行一次比較的話(總共比較了cn

2次),就一定可以確定所有元素的順序。但是,如果我們運氣足夠好的話,我們可能不必對所有元素兩兩進行一次比較。比如說對於有三個元素a1,a2,a3的線性表進行排序,如果我們先比較a1和a2,得到a1≤a2;然後比較a2和a3,得到a2≤a3;則不必比較a1和a3,因為根據偏序集的傳遞性,必有a1≤a3;但是如果a2≥a3,我們還必須比較a1和a3才能確定a1和a3的相對位置。如果我們適當的安排比較的次序的話,也可以減少比較的次數。這樣我們可以用一棵二叉樹表示比較的順序,如下圖所示:

該樹的每乙個非葉節點表示一次比較,每一根樹枝表示一種比較結果,每乙個葉節點表示一種排列順序。這樣的一棵二叉樹叫做決策樹,它用樹枝表示了每次決策做出的選擇。如此我們可以將任何乙個比較排序演算法用一棵決策樹來表示。

請注意上圖只表明了對三個元素的一種比較演算法,這種比較演算法依次比較(a1,a2)(a2,a3)(a1,a3),一旦中間某步得到足夠的資訊就可以停止比較,但是當演算法執行完後(三次比較後),一定可以確定三個元素間的次序。因此我們有理由將演算法在最壞情況下的比較次數作為演算法複雜性的度量,對於本例該演算法在最壞情況下要進行c3

2=3次比較。

顯然,一棵決策樹中最高葉節點的高度就是該決策樹對應的演算法在最壞情況下所需的比較次數,而決策樹中最低葉節點的高度就是該決策樹對應的演算法在最好情況下所需的比較次數。

我們的問題就變為:對於任意一棵決策樹(任意一種比較排序演算法),它的最高的樹葉的高度是多少?這個高度就對應於比較排序演算法所需的最多比較次數(在運氣最壞的情況下);換句話說,對於任何乙個輸入,該演算法至少需要比較多少次就可以對元素進行排序。

我們發現,決策樹的每個葉節點對應乙個n個元素的排列,其中可能有重複的;但是由於決策樹表明了所有可能遇到的情況,因而n個元素的所有排列都在決策樹中出現過。n個元素共有n!種排列,即決策樹的葉節點數目至少為n!。又因為一棵高度為h的二叉樹(指二叉樹的最高樹葉高度為h)的葉節點數目最多為2h個(這時正好是滿二叉樹,即每個非葉節點都有兩個子節點),因此n!≤2h,得到h≥log(n!),其中log以2為底。根據stirling公式有n!>(n/e)n,於是h>nlogn-nloge,即h=ω(nlogn)。

這樣我們就證明了對於任意一種利用比較來確定元素間相對位置的排序演算法,其最壞情況下複雜性為ω(nlogn)。

在下文中我們將討論幾種比較排序演算法,其中快速排序在平均情況下複雜性為o(nlogn),最壞情況下複雜性為o(n2);堆排序和合併排序在最壞情況下複雜性為o(nlogn),因此堆排序和合併排序是漸進最優的比較排序演算法。

排序演算法是否還能夠改進呢?從前文我們知道,如果要改進排序演算法的效率,就不能只利用比較來確定元素間相對位置。因此我們還需要知道元素的其他附加資訊,光知道元素的大小資訊是不夠的。下文中我們介紹的計數排序,基數排序和桶排序是具有線性時間複雜性的排序演算法,這些演算法無一例外地對輸入資料作了某些附加限制,從而增加已知的資訊,因此可以不通過比較來確定元素間的相對位置。

決策樹 排序問題的計算複雜性 收藏

排序問題的計算複雜性 對排序演算法計算時間的分析可以遵循若干種不同的準則,通常以排序過程所需要的演算法步數作為度量,有時也以排序過程中所作的鍵比較次數作為度量。特別是當作一次鍵比較需要較長時間,例如,當鍵是較長的字串時,常以鍵比較次數作為排序演算法計算時間複雜性的度量。當排序時需要移動記錄,且記錄都...

《計算複雜性與演算法分析》和《計算複雜性》學習

今天偶然間碰到數學界著名的七大千禧難題,關注了p和np問題,但是裡面提到關於演算法的複雜性的描述已經超出了自己的知識範圍,我找到了一本書來彌補這個不足,即 計算複雜性與演算法分析 希望自己在看完這本書之後能夠對計算複雜性有完整的概念 首先看看它的目錄 其實大部分的知識都有接觸過,但是沒有形成體系 接...

《計算複雜性 現代方法》 0 3 大O記號

演算法的計算效率一般通過將該演算法執行的基本操作的個數表達為演算法輸入的長度的函式來表示。這就是說,演算法的效率用從自然數集n到其自身的函式t來刻畫,t n 是演算法在所有長度為n的輸入上執行的基本操作的最大個數。然而,函式t的形式有時嚴重地依賴於基本操作的具體定義。例如,在整數的加法中,基本操作既...