我已经实现了Prim's algorithm来查找图表的最小权重生成树,并且工作正常。
现在我想在生成树中选择“最佳”头部。 “最好”是指更多平衡头,我应该在treeView UI中显示树。我确信有很多算法,但我不知道如何命名问题!
答案 0 :(得分:4)
您可以使用的一个标准是从节点到所有其他节点的平均距离。选择平均距离最小的节点。您也可以尝试平均距离等。
答案 1 :(得分:0)
嗯,splay trees
和AVL Trees
可以满足您的要求,但每个节点最多只能有2个孩子。
您可以尝试修改它们。问题可能是Form a tree which is as wide as possible
。
答案 2 :(得分:0)
您可以使用“最里面”节点,最大化叶子的最小距离。为了计算它,我认为以下算法可能有效(我没有验证它):
S = set of all leaves of the tree
foreach node in S: mark(node)
repeat:
# at each iteration, S is the set of all nodes at
# a given min distance to a leave
# initially this distance is 0, then 1, etc.
S' = empty set
foreach node in S:
parent = parent(node)
if !marked(parent): S' += parent; mark(parent)
if S' is empty then S contains all innermost nodes, we are done
S = S' and continue