(水壺)假設給了你個紅色的水壺和個藍色的水壺。它們的形狀和尺寸都各不相同。所有紅色水壺的容量都不一樣多,藍色水壺也是如此。而且,對於每一個紅色水壺來說,都有一個對應的藍色水壺,兩者容量相等;反之亦然。
你的任務是找出所有的容量相等的紅色水壺和藍色水壺,並將它們配成一對。爲此,可以執行如下操作:挑出一對水壺,其中一個是紅色的,另一個是藍色的,將紅色水壺中倒滿水,再將水倒入藍色水壺中。通過這一操作,可以判斷出這個紅色水壺的容量是否比藍色水壺的容量更多,或是兩者一樣多的。假設這樣的比較需要花費一個單位時間。你的目標是找出一個算法,它能夠用最少的比較次數來確定所有水壺的配對。注意,你不能直接比較兩個紅色或兩個藍色的水壺。
a. 設計一個確定性算法,它能夠用次比較來完成所有水壺的配對。
b. 證明:解決該問題算法的比較次數下界爲。
c. 設計一個隨機算法,其期望的比較次數爲,並證明這個界是正確的。對你的算法來說,最壞情況下的比較次數是多少?
解
a.
依次選取紅色水壺,將當前的紅色水壺與所有的藍色水壺進行比較,從中挑出與當前紅色水壺容量一樣的藍色水壺。下面給出該算法的僞代碼。
顯然,輸出數組是的一個排列。表示第個紅色水壺與第幾個藍色水壺配對。從僞代碼可以看出,也表示第個紅色水壺參與比較的次數,因爲第個藍色水壺是與第個紅色水壺比較的最後一個藍色水壺。因此,總的比較次數爲
因此,這一算法需要進行次比較。
b.
用決策樹模型來證明。考慮一個簡單的例子,個紅色水壺爲,個藍色水壺爲,決策樹如下所示。
在決策樹中,每個葉結點都是可能的配對情況,每個非葉結點表示一次比較。如果紅藍水壺各有個,那麼根據排列組合原理,可能的配對情況一共有種,也就是說決策樹一共有個葉結點。假設該決策樹的高度爲,那麼它最多包含個葉結點。於是有
對該不等式兩邊取對數,得到。所以,解決水壺配對問題的算法的比較次數的下界爲。
c.
按照題目意思,每一個紅色水壺都有一個藍色水壺與之容量相等。比較簡單的一個想法是,將所有紅色水壺按照容量由小到大進行排序,再將所有藍色水壺按照容量由小到大進行排序,排序後處於相同位置的紅色水壺和藍色水壺一定是容量相等的。排序可以採用隨機化的快速排序,期望時間複雜度爲。然而,這個想法違反了題目要求。因爲題目只允許紅色水壺與藍色水壺進行比較,而不允許相同顏色的水壺進行比較。
爲了滿足題目要求,可以考慮對快速排序做出修改,詳見下面的僞代碼。每次調用,從紅色水壺中隨機選出一個,將與所有藍色水壺比較,從而將藍色水壺分爲類:容量小於的藍色水壺,容量大於的藍色水壺,容量等於的藍色水壺。類似地,用藍色水壺將紅色水壺也分爲類:容量小於的藍色水壺,容量大於的藍色水壺,容量等於的藍色水壺。紅色水壺與藍色水壺的容量相等,二者配成一對。再遞歸的調用和。
該算法實際上是對兩個數組進行快速排序,根據第7章對快速排序的分析,期望的比較次數爲。在最壞情況下,比較次數爲。
算法導論 — 思考題8-4 水壺
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.