如何实现状态空间树?

时间:2009-08-06 08:34:19

标签: python algorithm

我正试图从MIT OCW解决问题背包问题。 问题集5。

我需要使用分支定界算法来找到最佳状态。 所以我需要实现一个状态空间树。 我理解这个算法的想法,但我发现它实现起来并不容易。

如果我找到预算不足的节点,我应该就此止步。 我应该为每个树节点添加一个属性吗?

当我添加节点时,我应该从具有最大上限的节点开始。 我怎样才能找到这样的节点?在添加每个节点之前,是否需要遍历所有节点?或者我可以保存一些var以帮助解决这个问题吗?

你知道吗?你能在python中实现它吗?

1 个答案:

答案 0 :(得分:2)

我希望我能正确理解这个问题,如果没有请指导我:) (对于因“国家”两种不同含义引起的混淆而感到抱歉)

您当然可以在节点中添加属性(它是状态的一部分!),因为它是非常少量的数据。请注意,保存它并不是强制性的,因为它隐含地出现在状态的其余部分(考虑到您已经选择的状态,您可以计算它)。就个人而言,我会添加属性,因为多次计算它没有意义。

关于第二个问题:IIRC,当你添加节点时,你不必遍历所有树,而只需要遍历边缘(即没有后代的节点集 - 不要混淆最深层的树)。 由于您正在寻找上限,(并且由于您只使用正成本),因此在查找具有最高值的节点时有三种情况:

  • 在您附加到具有最高值的节点的最后一步,因此您刚刚添加的节点现在具有最高值
  • 在最后一步添加超出预算,因此您必须排除该选项。尝试添加另一个州
  • 没有更多州尝试添加以构建新节点。这个分支不能再进一步了。查看其他节点中最高值的边缘