【发布时间】:2012-02-22 11:20:00
【问题描述】:
权重顺序如何影响回溯算法中的计算成本?节点和搜索树的数量是一样的,但是无序的时候需要更多的时间,所以它正在做一些事情。
谢谢!
【问题讨论】:
-
如何选择算法的下一个节点?
-
这是一棵二叉树,其中包含/排除它的元素并尝试所有可能的组合
权重顺序如何影响回溯算法中的计算成本?节点和搜索树的数量是一样的,但是无序的时候需要更多的时间,所以它正在做一些事情。
谢谢!
【问题讨论】:
有时在回溯算法中,当您知道某个分支不是答案时 - 您可以修剪它。这在游戏代理中很常见,称为Alpha Beta Prunning。
因此 - 当您对访问的节点重新排序时,您可以提高修剪率,从而减少您访问的实际节点数,而不会影响您答案的正确性。
另一种可能性 - 如果没有修剪是缓存性能。有时树存储为数组[尤其是complete trees]。数组在迭代时最有效,而不是“随机跳跃”。重新排序可能会改变这种行为,从而导致更好/更差的缓存行为。
【讨论】:
回溯的本质正是不考虑所有可能性或节点(在这种情况下),但是,如果节点没有排序 算法不可能“修剪”一个可能的分支,因为它不确定元素是否真的在那个分支上。
不同于,当它是有序树时,因为如果搜索的元素是更大/更小该子树的根,则搜索的元素在右边或分别向左。这就是为什么如果树没有排序,则计算顺序等于蛮力,然而,如果树以最坏的情况排序,则相当于蛮力,但执行的顺序更小。
【讨论】: