給定每個邊都有相關成本的樹的根。查找訪問樹的每個節點的最低成本。查找訪問樹的所有節點的最小開銷
是來到我的腦海遞歸的解決方案是:當節點是節點遞歸地計算成本的每一個孩子℃的葉返回0
- 基本情況。
- 合計所有這些成本,並且還將兩次從節點到小孩的邊緣成本加起來(因爲我們需要回溯)。
- 減去成本最高的孩子的邊緣成本(「貪婪」 - 我們不想從成本最高的孩子回溯)。
該方法是否正確?
有沒有更好的方法來解決問題?
給定每個邊都有相關成本的樹的根。查找訪問樹的每個節點的最低成本。查找訪問樹的所有節點的最小開銷
是來到我的腦海遞歸的解決方案是:當節點是節點遞歸地計算成本的每一個孩子℃的葉返回0
該方法是否正確?
有沒有更好的方法來解決問題?
edges * 2
屬於該子樹。答案應該是:
sum(cost(edge)*2) - sum(edge which in the path)
我檢查你的解決方案,我認爲這是錯誤的(如果我誤解你的解決方案,請留言):
減(「貪婪」 - 我們不希望從兒童回溯,成本最高)。
那孩子會是樹,有些邊緣必須訪問兩次。例如:
A
/\
B C
/\
D E
您無法訪問該子樹的所有邊一次訪問所有節點。
1-除最後一個葉節點外,所有節點路徑都將被訪問兩次。
2-我們將需要找出哪個葉節點具有最高的成本附加訪問根節點。
3-一旦我們發現這一點,我們將需要使我們的遍歷,使這個葉節點是最後訪問的節點。
_first_訪問的節點也是可能的葉子;如果樹是折線圖,最佳解決方案將被唯一確定(即所有邊)。第一個和最後一個訪問節點都將是一片葉子。 – Codor
我發現問題描述有點混亂; 「訪問」究竟如何?顯然,所提出的算法計算兩次所有邊權重的總和。 – Codor
這不就是[最小權重生成樹](https://en.wikipedia.org/wiki/Minimum_spanning_tree)的含義。在這個頁面上定義了算法,你可以通過這些。 – harindersingh
@harindersingh我不必找到最小權重生成樹。 –