【问题标题】:Backtracking Algorithm回溯算法
【发布时间】:2012-02-22 11:20:00
【问题描述】:

权重顺序如何影响回溯算法中的计算成本?节点和搜索树的数量是一样的,但是无序的时候需要更多的时间,所以它正在做一些事情。

谢谢!

【问题讨论】:

  • 如何选择算法的下一个节点?
  • 这是一棵二叉树,其中包含/排除它的元素并尝试所有可能的组合

标签: algorithm backtracking


【解决方案1】:

有时在回溯算法中,当您知道某个分支不是答案时 - 您可以修剪它。这在游戏代理中很常见,称为Alpha Beta Prunning

因此 - 当您对访问的节点重新排序时,您可以提高修剪率,从而减少您访问的实际节点数,而不会影响您答案的正确性。

另一种可能性 - 如果没有修剪是缓存性能。有时树存储为数组[尤其是complete trees]。数组在迭代时最有效,而不是“随机跳跃”。重新排序可能会改变这种行为,从而导致更好/更差的缓存行为。

【讨论】:

  • 它是用python列表实现的,还没有剪枝(可能下一步)
【解决方案2】:

回溯的本质正是不考虑所有可能性或节点(在这种情况下),但是,如果节点没有排序 算法不可能“修剪”一个可能的分支,因为它不确定元素是否真的在那个分支上

不同于,当它是有序树时,因为如果搜索的元素是更大/更小该子树的根,则搜索的元素在右边或分别向左。这就是为什么如果树没有排序,则计算顺序等于蛮力,然而,如果树以最坏的情况排序,则相当于蛮力,但执行的顺序更小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 2013-07-20
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多