[英]Optimal Search Tree : Calculate the cost of the search tree and show that it is not optimal
考慮以下二叉搜索樹,以及以下查找頻率:
13 Key | 13 | 11 | 26 | 1 | 12 | 28
/ \ -----------------------------------------
11 26 Frequency | 26 | 5 | 25 | 1 | 3 | 15
/ \ \
1 12 28
我得到了這個問題:
針對給定的搜索頻率計算上述搜索樹的成本,並顯示搜索樹對於給定的搜索頻率不是最佳的。
我計算了成本,但我的老師說我做錯了,但沒有解釋原因。
因此,我們需要為計算成本做的是檢查第一個節點的位置。 13是1
級,頻率13是26
。 所以我們做26*1=26
節點11和26處於級別2,節點1,12和28處於級別3。
最后我們有成本: 26*1 + 5*2 + 25*2 + 1*3 + 3*3 + 15*3
。 我的老師說這個計算不正確,但沒有解釋原因。
另外,您如何證明樹不是最佳的? 這是我從腳本中得到的定義:
設
K
是一組密鑰,R
是工作負載。 對於R
iffP(T) = min{P(T') | T' is search tree for K}
,K
搜索樹T
是最佳的P(T) = min{P(T') | T' is search tree for K}
@templatetypedef非常感謝您抽出寶貴的時間和幫助! 你的回答對我很好,我從中理解了很多東西。 這是樹,我發現它比任務中的這棵樹更優化:
26
/ \
13 28
/
11
/ \
1 12
上面的樹有143
成本,這個有138
。 所以這個真的更優化,任務解決了:)
從根本上說,您正在接近正確計算BST中的總查找時間的問題。 您將使用樹中的每個節點,使用深度來確定執行以該節點結束的查找所需的比較次數,將這些值乘以查找次數,並對結果求和。 我並沒有仔細地仔細檢查你的確切計算,所以你可能錯過了一些東西。
您的第二個問題是確定二叉搜索樹對於給定的查找集是否是最佳的。 您已經給出了嚴格的數學定義,但在這種情況下,我認為在更高層次上解釋這一點可能會更容易一些。
您之前在此處進行的計算是一種從BST開始的方式以及有關將執行哪些查找的信息,然后計算與在執行這些查找過程中最終將進行的比較次數相對應的數字。 這個數字實際上告訴你這些查找的速度有多快 - 更高的數字意味着查找需要更長的時間,更低的數字意味着查找將花費更少的時間。
現在,假設您想制作一個BST,它將花費最少的總時間來執行相關的查找。 換句話說,您希望給定的一組鍵和查找頻率具有“最佳”BST。 該BST將是總查找成本最低的那個,其中該成本是使用您之前處理的方法計算的。 具有該屬性的BST的術語 - 它對於您可以制作的所有可能BST中的那些頻率具有最佳查找速度 - 是最佳BST。
這里的問題是表明你擁有的樹不是最佳的。 這意味着您需要證明這不是您可以制作的最佳樹。 一種方法是找到更好的樹。 那么你能找到另一個具有相同鍵的BST,其總查找時間低於你給出的那個嗎?
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.