《演算法導論》13.1習題
前三題考察對紅黑樹5條性質的理解,比較簡單。4-7題很有啟發性。
13.1-4 可以把從樹根到葉子的路徑想象成一根枝條,按照紅黑樹屬性5的要求,當完全收縮時,每根枝條上黑色節點數目是相同的,當完全伸展開時,會從兩個黑色節點之間抽出一個紅色節點。
這種設計的妙處是,對同一個根下的兩根枝條a,b(a長於b),有 b.height <= a.height <= 2*b.height,於是控制了樹的形狀相對平衡。
13.1-5 其實13.1-4 已經證明了這一點,完全收縮的枝條就是根到葉子的最短路徑,完全伸展的枝條就是根到葉子最長的路徑,最長路徑與最短路徑相比,每兩個黑色節點之間都插入了一個紅色節點,所以長度是兩倍的關係。
13.1-6 在黑高為bh的樹上,內部節點最多的情況是紅黑相間排列,有
2^(2*bh)-1
個;最少的情況是沒有紅色節點,有2^bh-1
個。13.1-7 the largest ratio = 2, the smallest ratio = 0。
相關推薦
演算法導論13.1紅黑樹的性質 練習總結
13.1-1 按照圖13-1(a) 的方式,畫出關鍵字集合{1,2,... ,15 }上高度為 3 的完全二叉搜尋樹。以三種不同方式想圖中加入 NIL 葉結點並對各結點著色,使所得的紅黑樹的黑高分別為 2,3 和 4。 ANSWER: 如上圖的二叉樹(省略哨兵 T.nil
《演算法導論》13.1習題
前三題考察對紅黑樹5條性質的理解,比較簡單。4-7題很有啟發性。 13.1-4 可以把從樹根到葉子的路徑想象成一根枝條,按照紅黑樹屬性5的要求,當完全收縮時,每根枝條上黑色節點數目是相同的,當完全伸展開時,會從兩個黑色節點之間抽出一個紅色節點。 這種設計的妙處是,對同一個根下的兩根枝條a,b(a長於
演算法導論2.1.3
#include<iostream> using namespace std; int main() { int j; int aim = 10; int quene[10] = { 9,4,7,1,8,3,6,2,5,0 };
演算法導論 10.1-2 用一個數組實現兩個棧
一、題目說明如何用一個數組A[1..n]來實現兩個棧,使得兩個棧中的元素總和不到n時,兩個都不會發生上溯。注意PUSH和POP操作的時間應為O(1)二、思考分別用陣列的兩端作為兩個棧的起點,向中間擴充套
演算法導論2.1-4 考慮n位二進位制整數相加起來的問題
考慮把兩個n位二進位制整數加起來的問題,這兩個整數分別儲存在兩個n元陣列A和B中。這兩個整數的和應按二進位制形式儲存在一個(n+1)元陣列C中。使用java程式碼實現;實現程式碼如下:引數A和B為相同長度n的整形陣列,該函式返回一個長度為n+1的陣列 private s
演算法導論3.1練習題
3.1-1: 假設0⩽c1(f(n)+g(n))⩽max(f(n),g(n))⩽c2(f(n)+g(n)) ∴0⩽c1(x+y)⩽x+y+|x−y|2⩽c2(x+y)
演算法導論 — 15.1 鋼條切割
筆記 本節給出一個尋找鋼條最優切割方案的問題。公司購買長鋼條,將其切割為短鋼條出售。為簡化分析,假設切割過程本身沒有成本,並且切割下來的短鋼條長度都為一英寸的整數倍。下表給出了不同長度的鋼條的價格。 鋼條切割問題:給定一根長度為n英寸的長鋼
排列問題(permulation)(演算法導論入門經典習題)
問題: 用1,2,3,…,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式輸出所有解,每行一個解。提示:不必 太動腦筋。 /*排列問題*/ #include<stdio.h> int ma
演算法導論13章紅黑樹 思考題總結
13-1 (持久動態集合) 有時在演算法的執行過程中我們會發現在更新一個動態集合時,需要維護其過去的版本。我們稱這樣的集合為持久的(persistent)。實現持久集合的一種方法是每當改集合被修改時,就將其完整地複製下來,但是這種方法會降低一個程式的執行速度,而且佔用過多的
演算法導論26.1-4
26.1-4 問題描述 設f為網路的一個流,設α為一個實數,則αf稱為標量流積,該標量流積是一個從V×V到R的一個函式,其定義如下: (αf)(u,v)=α⋅f(u,v) 證明:網路中的流形成
演算法導論22.1圖的表示 練習總結
22.1-1 給定有向圖的鄰接連結串列,需要多長時間才能計算出每個結點的出度(發出的邊的條數)?多長時間才能計算出每個結點的入度(進入的邊的條數)? ANSWER:① 出度:O(V+E),因為計算 n 個結點的連結串列長度為 O(n),所以需要計算 O(V) 個連結串列長度
POJ 1679 The Unique MST(演算法導論23-1次優最小生成樹)
只需要講解演算法導論的題即可。 23-1次優最小生成樹 a. 最小生成樹唯一性證明: 已知當前構造的邊集A是最小生成樹的子集。令無向圖G的一個切割是,顯然該切割是尊重A的。已知跨越該切割的輕量級邊對於A是安全的,又因為該無向圖G的每條邊的權值都不相同,所以對於當前A而
演算法導論13-4:Treap
g、在之前的證明中,我們已經得出結論:X[i,k]=1當且僅當y跟x之間節點的的優先順序是按照某種特定次序的。我們已經在(f)中證明了,X[i,k]=1只依賴於x,y優先順序的相對次序,並且對所有的滿足 key[y] < key[z] < key[x] 的z, 有priority[y] <
演算法導論12.1什麼是二叉搜尋樹 練習總結
12.1-1 對於關鍵字集合 { 1,4,5,10,16,17,21 },分別畫出高度為2、3、4、5 和 6 的二叉搜尋樹。 ANSWER: 12.1-2 二叉搜尋樹性質與最小堆性質(見 6.1 節)之間有什麼不同?能使用最小堆性質在 O( n ) 時間內按序輸出一顆有
演算法導論 5.1-3
畫出BIASED-RANDOM真值表 輸出值 0 1 概率 1-p p 基於BIASE-RANDOM真值表,畫出獨立的兩次BIASED-RANDOM過程的真值表 輸出值 00 01 10 11 概率 (1-p)(1-p) p(1-p) p(1-p) pp 可見輸出01和10的概率是相同的,那麼可以使用如
演算法導論 5.1-1
證明:由於應聘者出現的順序是隨機的,所以所有應聘者的全序序列的任意一個都有可能出現。如果程式HIRE-ASSISTANT總是能決定哪一個應聘者最佳,就意味著無論應聘者全序序列中的那個序列出現,程式都可以比較出兩個應聘者誰更有資格,全序序列包含著所有兩個應聘者出現順序的可能,所以任意兩個應聘者的資格都可以給出
由《演算法導論》10-1例題與習題引發的思考
這一節涉及到棧,佇列,雙端佇列及一些組合形式,為了突出重點,簡化問題,令元素型別一律為int,物理儲存結構一律採用定長陣列。 例題1 :棧 下面的程式碼就實現了一個簡單的棧,棧內可容納元素個數有上限。在實現每個型別的時候都應該問問自己,為什麼需要維護這些資料成員,多一個會不會更好?少一個可行嗎? 因為棧是
《演算法導論》習題解答 Chapter 22.1-5(求平方圖)
一、鄰接矩陣實現思路:如果是鄰接矩陣儲存,設鄰接矩陣為A,則A*A即為平方圖,只需要矩陣相乘即可; 虛擬碼: for i=1 to n for j=1 to n for k=1 to n result[i][j]+=matrix[i][k]*matrix[k][
《演算法導論》習題解答 Chapter 22.1-4(去除重邊)
思路:重開一個新圖,按著鄰接列表的順序從上到下遍歷,每遍歷一行連結串列前,清空visited陣列,如果沒有訪問過這個元素,則加入新圖,如果已經訪問過了(重邊),則不動。 虛擬碼: 複雜度:O(V+E) for each u 屬於 Vertex visited[u]
演算法導論01--習題(1)
演算法導論01–習題(1) 1.1-1 給出現實生活中需要排序的一個例子或者現實生活中需要計算凸殼的一個例子 答:排序比較多,比如商場產品單價、銷量、總價的排序、全校學生的成績登入系統需要排序,還有一些需要按一定屬性排序的情況等。凸殼則比較複雜,(給定平面上的n