演算法導論6 1

2022-07-07 15:36:16 字數 1302 閱讀 2198

本小節首先介紹了__堆__的概念,然後又介紹了__二叉堆__的兩種形式:最大堆和最小堆;

其中圖\((a)\)是二叉堆邏輯上的結構,圖\((b)\)是物理上的結構。如何從物理上的結構對映到邏輯的結構,通過下方的簡單的函式進行對映。

所有的父節點都__大於等於子__節點。

所有的父節點都__小於等於__子節點。

在高度為\(h\)的堆中,元素個數最多和最少分別是多少?

最多的情況,滿子節點,個數為\(2^ -1\);

最少的情況,只有乙個子節點,個數為$2^h $

證明:含\(n\)個元素的堆的高度為\(\lfloor \lg\rfloor\)

令\(n\)個元素的堆的高度為\(h\),有第一題可得

\[2^h \le n \le 2^ -1 \\

h \le \lg \le h+1

\]證畢。

證明:在最大堆的任意子樹中,該子樹所包含的最大元素在該子樹的根節點上。

根據最大堆的定義可知,上述結論是顯而易見的。

假設乙個最大堆的所有元素都不相同,那麼該堆的最小元素應該位於**?

在最大堆的葉子節點上,但是在哪乙個不確定。

乙個已排好序的陣列是乙個最小堆嗎?

是最小堆的一種特殊情況,左節點小於右節點的情況;

值為\((23, 17, 14, 6, 13, 10, 1, 5, 7, 12)\)的陣列是乙個最大堆嗎?

標記為紅色的連線不符合最大堆的定義,所以該陣列不是乙個最大堆。

證明:當用陣列表示儲存\(n\)個元素的堆時,葉節點下標分別是\(\lfloor n/2\rfloor +1, \lfloor n/2\rfloor +2, ..., n\)。

根據二叉堆的性質:某節點下標為\(i\)(非根節點),其父節點的下標為\(\lfloor(i/2)\rfloor\),因此最後乙個葉節點的父節點的下標為\(\lfloor(n/2)\rfloor\),所以從下標\(\lfloor(n/2)\rfloor+1\)開始到\(n\)都是葉節點。

演算法準備 6 1

描述 有 n 個花園,按從 1 到 n 標記。在每個花園中,你打算種下四種花之一。paths i x,y 描述了花園 x 到花園 y 的雙向路徑。另外,沒有花園有 3 條以上的路徑可以進入或者離開。你需要為每個花園選擇一種花,使得通過路徑相連的任何兩個花園中的花的種類互不相同。以陣列形式返回選擇的方...

演算法導論 思考題6 1 用插入的方法建堆

用插入的方法建堆 我們們可以通過反覆呼叫max heap insert實現向乙個堆中插入元素,考慮build max heap的如下實現方式 a.當輸入資料相同的時候,build max heap和build max heap 生成的堆是否總是一樣?如果是,請證明 否則,請舉出乙個反例。b.證明 在...

演算法導論 隨機演算法

一.概率分布 對於有些問題本身是屬於概率問題,如僱傭問題 對於此類問題,我們需要利用概率分析來得到演算法的執行時間,有時也用來分析其他的量。例如,僱傭問題中的費用問題也需要結合概率分析來計算得到。為了使用概率分析,我們必須使用或者假設已知關於輸入的概率分布,然後通過分析該演算法計算出平均情況下的執行...