【发布时间】:2012-11-19 15:22:22
【问题描述】:
我得到了一棵树 T,它有 n 节点和 l 叶子。
我必须选择一些正好包含k (<=l) 叶子的子树。如果我选择节点t的祖先的子树,我们不能选择t的子树。
例如:
这是树 T,它有 13 个节点(7 个叶子)。
如果我想选择 k = 4 叶子,我可以选择节点 4 和 6(或节点 2 和 5)。这是选择的最小数量。 (我们也可以选择节点 6、7、8、9,但这不是最小值)。
如果我想选择k = 5叶子,我可以选择节点3,这是选择的最小数量。
我想选择最少数量的子树。我只能找到O(nk^2) 和O(nk) 算法,它使用BFS 和动态编程。选择这个有更好的解决方案吗?
谢谢:)
【问题讨论】:
-
你能举个简单的例子吗?我一直无法理解如何才能拥有最少的子树数。据我所知,你总是有固定数量的有 k 片叶子的树。
-
@Rubens 完成。感谢您的建议:)
-
不客气!现在,您的问题变得足够紧凑,可以提供有趣的解决方案 ^^ 发生了,不过,我看不出比 O(nk) 更好的了。好问题,无论如何!