習題編號以第3版為準
解:(a) 根據第7行和第9行,檢查pair總是在其中乙個節點被加黑的時候進行。對於,會在v1被加黑的時候檢查一次,在v2被加黑的時候檢查一次,對於先加黑的節點而言此時另乙個節點尚未加黑,故第10行只會輸出一次。
(b) 對於節點u,lca(u)執行完畢時,以u為根的子樹都在同乙個集合裡,而且全部被加黑,且u是最後乙個被加黑的。從u的父親來看,lca(u)一旦執行完,u所在的集合會與u.p所在的集合合併。另外由於遞迴的性質,只有當u的所有後代v都完成lca(v)之後,lca(u)才會返回。現在考慮對於節點u,剛剛進入lca(u)還未make-set(u)時的遞迴棧,此時從root到u的路徑上的每乙個節點x,lca(x)都尚未返回,每個x都未與父親合併,所以每個x都在乙個不同的集合裡,另外x的每個已完成的孩子都已經與x合併,故不相交集合的個數為u的深度。
(c) 假設v先加黑,那麼在執行lca(u)的時候,u的每個祖先都代表了乙個不相交集合,v一定和u的某個祖先在同乙個集合裡,易知這個祖先就是u和v的最小公共祖先。
演算法導論習題解 第16章貪心演算法
習題編號以第三版為準。對於活動選擇問題,並不是所有貪心方法都能得到最大相容活動子集。請舉例說明,每次選擇時間最短者,或最早開始者,或重疊的活動數量最小者,均不能得到最優解。使用最少的教室完成所有活動。用頂點表示活動,不相容的活動之間有一條邊。使用最少的顏色對頂點著色,使得任意邊的兩端顏色均不相同。i...
演算法導論第21章 不相交集合 鍊錶表示
乙個不相交資料結構維護了乙個不相交動態集的集合s 用乙個代表來標示每個集合,這個代表是集合中的任意乙個元素。支援一下三種操作 1 makeset x 建立乙個新的集合,成員為x,因為各個集合是不相交的,故不出現在任何其他集合中。2 uinon x,y 將包含x和y的兩個集合合併成乙個新的集合,即為這...
演算法導論第8章習題
前面的排序都是基於比較排序,有時候不需要比較也可以排序。關鍵是那些東西有乙個好的表示,比如說整數。用decision tree證明,omega n lg n 是所有比較排序演算法的下界。決策樹中間節點表示比較的兩個東西,葉子節點表示元素的乙個置換,決策樹的每條邊表示這個演算法在這個節點獲得的比較資訊...