我正在寻找一种从链中选择节点子集的算法。例如,对于在时间链中具有“N”个节点的给定节点,我想基于标准选择“K”节点,使得K <1。 N.例如,如果我必须在集合{D1,D2,D3,... DN}“N = 7”中选择“K = 3”天的一组天{D1,D2,DK},该怎么办?一周中的天数,以便我最大化以下成本:
我需要从集{D1,....,DN}中选择最佳“K”项。一种可能性是我可以列举所有可能的选择并选择最佳组合:
...
1 0 0 0 0 1 1
0 0 0 0 1 1 1
0 1 0 0 1 1 0
...
计算机科学中是否有一个众所周知的算法来解决这个问题?如果是这样,任何指向适当资源/代码的指针都可能有所帮助。
PS:我不确定这是否是正确的论坛,请在下面发表评论,我会重新发布。
答案 0 :(得分:2)
由于目标是线性的,因此该问题具有最佳子结构,因此适合于动态编程。对于从0到K的每个i
,对于从0到N的每个j
,确定从第一个i
中选择j
个节点的最佳方式。只有一种方法可以选择i
= 0个节点。从第一个i
&gt;中选择j
个节点的最佳方法0是从第一个i
- 1或项目j
中选择j
的最佳方式,之前是选择i
的最佳方式 - 来自第一个{1}个节点{1}} - 1.通过避免重新计算子问题的最优值,运行时间是多项式的。