[英]how to prove A heap of 𝑛 keys is an array 𝐴 equivalent to balanced binary tree
我如何證明下面的句子? 一堆𝑛鍵是一個數組𝐴等價於平衡二叉樹(葉子的深度在護城河1處不同)。 深度為 Θ(log𝑛 )
該聲明並不完全正確,因為:
"A heap of 𝑛 keys is an array 𝐴" :堆不一定使用數組來實現。 這應該改寫。
“平衡二叉樹” :這僅適用於二叉堆。 有 d-ary 堆。
“等價”表示該語句在兩個方向上都有效,但不保證平衡的二叉樹對應於二叉堆。
我建議這樣的聲明:
𝑛 鍵的二叉堆——可以通過大小為 𝑛 的數組 𝐴 來實現——代表一棵平衡二叉樹,其葉子的深度最多相差 1,深度為 Θ(log𝑛)。
這是一個真實的陳述,因為二叉堆根據定義是一棵完整的二叉樹,如Wikipedia中所述:
形狀屬性:二叉堆是一棵完全二叉樹; 也就是說,除了最后一層(最深)之外,樹的所有層都被完全填滿,如果樹的最后一層不完整,則該層的節點從左到右被填滿。
這個屬性已經表明二叉堆是一棵二叉樹,它的葉子在底層,可能還有一些在它上面的層次。 這意味着葉子深度的最大差異為1。
給定一個帶有𝑛鍵的二叉堆,第一層(根)將有 1 個鍵,第二層將有 2 個鍵,第三層將有 4 個鍵,... 以此類推,每次加倍,直到所有鍵都分配完畢,所以最后一層可能有許多不是 2 的冪的節點。
如果我們按照層序對鍵進行編號,從 1 開始,那么第二層最左邊的節點將具有數字 2,第三層最左邊的節點將具有數字 4,......等等,每次2 的下一個冪,因此級別 𝑘(從零開始)的最左側節點的編號為 2 𝑘 。 底層最左邊的節點將有一個數字 2 𝑘 ,這樣 𝑛/2 < 2 𝑘 ≤ 𝑛
因此,底層節點的深度為 𝑘,(給定上述 2 𝑘的范圍)為 O(log𝑛)。
請注意,二叉堆可以很好地表示為數組𝐴這一事實並不真正相關,因為完全二叉樹的屬性已經存在於二叉堆的定義中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.