利用對手論證法證明中位元問題的比較次數下界[ZZ]

來源:互聯網
上載者:User

5個數通過6次比較求中位元的方法如下:

5個數之間的大小關係構成的一個樹形圖T。T中的一個結點代表一個數,而一條邊代表它所關聯的兩個數的大小關係,T的根就是中位元。顯然T中的一條
邊要由一次比賽來確定。在下面的圖中,如果x大於y,則節點x在節點y的上方且x和y有一條邊相連。另外,*表示一般的數,o表示下一次即將進行比較的兩
個數。

第1步,先任取兩個數比較,結果為:

  *
  |
  *  o o *

第2步,再取另外兩個數比較,結果為:

  o  o
  |  |
  *  *  *
 
第3步,按照比較其中兩個標記為o的數,比較結果只有一種情況:

   *
  / /
 *   o
 | 
 *      o
 
第4步,按照比較其中兩個標記為o的數,比較結果有兩種情況:

   *    o               *
  /  / /               / /
 o    *               o   o
 |                    |   |
 *                    *   *
 
第5步,按照比較其中兩個標記為o的數,比較結果有兩種情況:

  *    *               *
 / /  / /             /
/   //   /           /
|   //   |          /
|  /  /  |         *
| /    / |         | /
|/      /|         |  /
o        o         |   /
|                  o    o
|                       |
|                       |
*                       *

第6步,按照比較其中兩個標記為o的數,比較結果有兩種情況:

 
*   *         *   *            *               *
 / /           / /             |               |
  x             x              *               *
  |            / /             |               |
  *           *   *            x               x
  |                            |              / /
  *                            *             *   *
                               |
                               *

其中的x就是中位元。

事實上,可以證明:對於n個數求中位元,至少需要3(n-1)/2次比較,並且存在一個O(n)次比較的演算法。

下面介紹如何利用對手論證方法來證明中位元問題的比較次數下界。

首先介紹“對手論證(Adversary Argument)”方法。

若用P表示所討論的問題,I表示問題的輸入,A表示求解問題P的基於比較運算的演算法T(A,I)表示對於輸入I演算法A的計算時間複雜性,那麼,函數
       U(n)=min{max{T(A,I)}, for each I}, for each A,
是問題P當輸入的大小為n時在最壞情況下的最好下界。它是問題所固有的。

問題P的這個最好下界通常很難按其定義計算得到,因為對於一個具體的A,要得到
       max{T(A,I)}, for each I
就是一件很難的事,更何況對於一切的A。因此,人們往往不去精確地求U(n),而是退而求其次,即找一個f(n),它不大於U(n)但盡量地接近於U(n),使f(n)成為問題P的一個好下界。

對手論證方法是找f(n)的一種有效方法。它的基本思想是對每一個A,構造一個輸入特殊的輸入I',使T(A,I')盡量地大,然後在所有A的集合上,求T(A,I')的盡量好的下界作為f(n)。這種方法通過
    f(n) <= min{T(A,I')}, for each A <= min{max{T(A,I)}, for each I}, for each A = U(n)
來保證f(n)是問題P的一個下界,又通過使T(A,I')盡量大來保證f(n)是一個好的下界。

對手論證方法的關鍵在於有一套對一切A都適用的構造符合要求的I'的策略,即對手策略。這種策略,逐步地構造出一個輸入I',便演算法A為得到與幾相
應的結果,要做盡量多次的比較和判斷,從而使T(A,I')盡量大。需要注意的是,一方面對手策略須具有一致性,即不能前後矛盾,以保證I'的存在性;另
一方面對手策略還須對一切A都適用,因為我們需要在一切A組成的集合上求T(A,I')的下界。至於策略的具體內容將因問題而異。甚至同一個問題可能有多
種策略,要得到好的下界,需要有好的策略。

中位元問題的原型是:任給n個數,要求找出它們的中位元,即第[(n+1)/2]大的數。

下面我們用對手論證方法來證明中位元問題比較次數的下界為3(n-1)/2次。

不失一般性,這裡假設所給的n個數互不相同,且n為奇數。

我們用A表示求解中位元問題的任意一個基於比較的演算法。對於任意給定的輸入I,演算法A在最後輸出所要找的中位元之時,已經確定了I中哪(n-
1)/2個數大於該中位元和哪(n-1)/2個數小於該中位元。我們稱I中大於中位元的數為上部數,小於中位元的數為下部數。顯然,演算法最終從I中分出
(n-1)/2個上部數和(n-1)/2個下部數,靠的是"組織"一系列的比賽。一個數最後被確定為上部數,要麼曾經直接與中位元比賽過且贏了它,要麼曾
經與另一個上部數比賽過且贏了它;類似地,一個數最後被確定為下部數,要麼曾經直接與中位元比賽過且輸給它,要麼曾經與另一個下部數比賽過且輸給它。我們
稱演算法中同是上部數或同是下部數之間的比賽,以及上部數或下部數與中位元之間的比賽為關鍵性比賽;而稱演算法中分別是上部數和下部數的兩個數之間的比賽為非
關鍵性比賽。注意,只有關鍵性比賽才能使我們獲得有用的資訊,非關鍵性比賽並不能使我們獲得有用的資訊。若用N1(A,I),N2(A,I)和
T(A,I)分別表示對於輸人I演算法A的關鍵性比賽次數、非關鍵性比賽次數和計算時間複雜性,那麼我們明顯有
  T(A,I) >= N1(A,I) + N2(A,I)
我們的目的是給出中位元問題的一個計算時間下界,即對於所有的演算法A,max{T(A,I)}的一個下界,而且希望這個下界的值盡量大。

為此,我們使用對手論證方法。對任意給定的演算法A,假設他的輸入為I,設M是不在I中的一個數,我們將從I出發,構造一個確定的輸入I'。因為非關
鍵性比賽不能使我們獲得有用資訊,是“無用”的比賽,為了得到盡量大的T(A,I'),我們構造的I'應該都使得N2(A,I')盡量地大。I中每兩數
x,y在進行比較前(參賽前)的狀態分別用N,N',L,S和E來表示,它們的含義依次是:

★ N : 該數未曾參加過比賽,且不是當前唯一的未參加過比賽的數;
★ N': 該數是當前唯一的末曾參加過比賽的數;
★ L : 該數已參加過比賽,且其值大於M;
★ S : 該數已參加過比賽,且其值小於M;
★ E : 該數已參加過比賽,且其值為M。

採取的對手策略如表1所示。注意,表1中的對手策略是一致的,因為I'中的數x,y只當在第一次參加比賽時(即x,y賽前狀態中有N'時)才會修改
x,y的值,一旦x,y的值被修改過了,以後再次參加比賽時就不再修改。表1中對手策略的關鍵是:當x,y第一次參加比賽時,如果該比賽可能成為關鍵性比
賽,則修改x,y的值使得該比賽便為非關鍵性比賽;在遇到最後一個參賽數時,將他的值修改為預先規定的中位元M的值。

                        表1  中位元問題的對手策略

+========+=======+=================================+============+===============+
|  x:y賽前狀態   |                                 |            |  x:y賽後狀態  |
|--------+-------|       對  手  策  略            |  比賽類型  +-------+-------+
|   x    |   y   |                                 |            |   x   |   y   |
+========+=======+=================================+============+=======+=======+

+========+=======+=================================+============+=======+=======+
|   N    |   N   | 若x>M且y>M,則減少y,使y<M;     |  非關鍵性  |   L   |   S   |
|        |       +---------------------------------+------------+-------+-------+
|        |       | 若x<M且y<M,則增加x,使x>M;     |  非關鍵性  |   L   |   S   |
|        |       +---------------------------------+------------+-------+-------+
|        |       | 若x<M且y>M,則不改變x,y         |  非關鍵性  |   S   |   L   |
|        |       +---------------------------------+------------+-------+-------+
|        |       | 若x>M且y<M,則不改變x,y         |  非關鍵性  |   L   |   S   |
+========+=======+=================================+============+=======+=======+
|   L    |   L   | 不改變x,y                       |  關鍵性    |   L   |   L   |
+========+=======+=================================+============+=======+=======+
|   S    |   S   | 不改變x,y                       |  關鍵性    |   S   |   S   |
+========+=======+=================================+============+=======+=======+
|   E    |   E   | 此情況不可能出現                |            |   -   |   -   |
+========+=======+=================================+============+=======+=======+
|   N'   |   N'  | 此情況不可能出現                |      -     |   -   |   -   |
+========+=======+=================================+============+=======+=======+

+========+=======+=================================+============+=======+=======+
|   L    |   N'  | 不改變x的值,令y的值為M         |  關鍵性    |   L   |   E   |
+========+=======+=================================+============+=======+=======+
|   N'   |   L   | 不改變y的值,令x的值為M         |  關鍵性    |   E   |   L   |
+========+=======+=================================+============+=======+=======+
|   S    |   N'  | 不改變x的值,令y的值為M         |  關鍵性    |   S   |   E   |
+========+=======+=================================+============+=======+=======+
|   N'   |   S   | 不改變y的值,令x的值為M         |  關鍵性    |   E   |   S   |
+========+=======+=================================+============+=======+=======+
|   N    |   N'  | 若x<M,不改變x的值,令y的值為M  |  關鍵性    |   S   |   E   |
|        |       +---------------------------------+------------+-------+-------+
|        |       | 若x>M,不改變x的值,令y的值為M  |  關鍵性    |   L   |   E   |
+========+=======+=================================+============+=======+=======+
|   N'   |   N   | 若y<M,不改變y的值,令x的值為M  |  關鍵性    |   E   |   S   |
|        |       +---------------------------------+------------+-------+-------+
|        |       | 若y>M,不改變y的值,令x的值為M  |  關鍵性    |   L   |   L   |
+========+=======+=================================+============+=======+=======+

+========+=======+=================================+============+=======+=======+
|   N    |   L   | 若x>M,則減小x,使x<M;          |  非關鍵性  |   S   |   L   |
+========+=======+=================================+============+=======+=======+
|   L    |   N   | 若y>M,則減少y,使y<M;          |  非關鍵性  |   L   |   S   |
+========+=======+=================================+============+=======+=======+
|   L    |   S   | 不改變x,y                       |  非關鍵性  |   L   |   S   |
+========+=======+=================================+============+=======+=======+
|   S    |   L   | 不改變x,y                       |  非關鍵性  |   S   |   L   |
+========+=======+=================================+============+=======+=======+
|   N    |   S   | 若x<M,則增加x,使x>M;          |  非關鍵性  |   L   |   S   |
+========+=======+=================================+============+=======+=======+
|   S    |   N   | 若y<M,則增加y,使y>M;          |  非關鍵性  |   S   |   L   |
+========+=======+=================================+============+=======+=======+

+========+=======+=================================+============+=======+=======+
|   N    |   E   | 此情況不可能出現                |     -      |   -   |   -   |
+========+=======+=================================+============+=======+=======+
|   E    |   N   | 此情況不可能出現                |     -      |   -   |   -   |
+========+=======+=================================+============+=======+=======+
|   L    |   E   | 不改變x,y                       |  關鍵性    |   L   |   E   |
+========+=======+=================================+============+=======+=======+
|   E    |   L   | 不改變x,y                       |  關鍵性    |   E   |   L   |
+========+=======+=================================+============+=======+=======+
|   S    |   E   | 不改變x,y                       |  關鍵性    |   S   |   E   |
+========+=======+=================================+============+=======+=======+
|   E    |   S   | 不改變x,y                       |  關鍵性    |   E   |   S   |
+========+=======+=================================+============+=======+=======+

根據表1的策略,I'中的數只當它在第一次參賽時才被修改,更進一步,對於由該策略構造出來的I'的n個數,其中至少有n-2個數參加了非關鍵性的比賽。注意到n是奇數,因此演算法A對根據表1構造的輸入I'所“組織”的比賽中,非關鍵性的比賽至少有(n-1)/2次,即
   N2(A,I') >= (n-1)/2    ------ (1)

面我們對於同一個I'來考慮N1(A,I')的界。如前所述,演算法A為了找出I'的中位元,必須識別出I'的(n-1)/2個上部數和(n-1)/2個下
部數。說得更具體些,演算法A至少必須識別出I'的n個數之間的大小關係構成的一個樹形圖T。T中的一個結點代表I'中的一個數,而一條邊代表它所關聯的兩
個數的大小關係,T的根就是中位元。顯然T中的一條邊要由一次比賽來確定,又因為一棵n個結點的樹有n-1條邊,因此T至少要有n-1次比賽才能夠確定,
而且這些比賽都必須是關鍵性的比賽。於是,我們有
   N1(A,I') >= n-1        ------ (2)
綜合(1)(2)式可知:
   max{T(A,I)} >= T(A,I') = N1(A,I') + N2(A,I') >= 3(n-1)/2
從而得到中位元問題的比較次數下界為3(n-1)/2。

至於最壞情況下O(n)次比較的選擇第k大元素的演算法,說起來比較麻煩,暫時就不說了(打字太累~~)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.