我正试图从MIT OCW解决问题背包问题。 问题集5。
我需要使用分支定界算法来找到最佳状态。 所以我需要实现一个状态空间树。 我理解这个算法的想法,但我发现它实现起来并不容易。
如果我找到预算不足的节点,我应该就此止步。 我应该为每个树节点添加一个属性吗?
当我添加节点时,我应该从具有最大上限的节点开始。 我怎样才能找到这样的节点?在添加每个节点之前,是否需要遍历所有节点?或者我可以保存一些var以帮助解决这个问题吗?
你知道吗?你能在python中实现它吗?答案 0 :(得分:2)
我希望我能正确理解这个问题,如果没有请指导我:) (对于因“国家”两种不同含义引起的混淆而感到抱歉)
您当然可以在节点中添加属性(它是状态的一部分!),因为它是非常少量的数据。请注意,保存它并不是强制性的,因为它隐含地出现在状态的其余部分(考虑到您已经选择的状态,您可以计算它)。就个人而言,我会添加属性,因为多次计算它没有意义。
关于第二个问题:IIRC,当你添加节点时,你不必遍历所有树,而只需要遍历边缘(即没有后代的节点集 - 不要混淆最深层的树)。 由于您正在寻找上限,(并且由于您只使用正成本),因此在查找具有最高值的节点时有三种情况: