如果在将值赋给变量X之后,如果在X处返回递归,则必须回溯 解。具体地说,这意味着对于剩余d值的单个变量,可以回溯 最多d次。对于以下每个约束图,如果每个变量都具有大小为d的域,则为多少 对于每个指定的排序,你是否需要在最坏的情况下回溯?
这是CS188 Spring Artificial Intelligence的一个问题
这是图表
A->B->C->D->E
问题:C-B-D-E-A
回溯数:0
为什么这仍被认为是线性排序?我不明白为什么E-A仍然没有被认为有从E到A的回溯,你将被迫回来并将通过3个变量。请帮忙。谢谢....
答案 0 :(得分:0)
看看这个问题,我想我可以说明你如何在这里得到答案。
要重新定义,假设我将此问题说明为5个节点A,B,C,D,E的着色问题。
每个节点都可以拥有这组域。 (蓝色,绿色)和我的约束,没有节点可以与其右边的节点具有相同的颜色。
然后,假设我开始按此顺序为此CSP分配值C-> B-> D-> E-> A,
这意味着,我为C选择了一个x in(蓝色,绿色),所以我选择Blue,然后,我可以从其域中消除B,Blue,因此B必须具有值Green。然后,当我查看D时,由于C被指定为蓝色,因此我知道D必须也被指定为值Green,并且在此过程中依此类推。等等。
这意味着通过分配C,我实际上几乎已经解决了这个排序向前推进的问题,这意味着最坏的情况是,由于通过分配C,我将永远不会有任何回溯,我已经约束了所有域我的所有其他节点,实际上,对于任何大小的域都是如此(如果它适用于2,它显然适用于我的域中的2+个元素。)
然而,您可能想知道,为什么订单A-> E-> B-> D-> C将具有2D回溯。
嗯,这是一个例子。假设我为A分配了蓝色值,然后为E分配了绿色,为B分配了绿色,为D分配了蓝色,并且因为我为B分配了绿色,我强制C为蓝色,但是C不能有蓝色,因为D现在有蓝色。因此,C在其域中没有有效元素,因此我需要回溯。
我需要多少次回溯?好吧,我必须从D取消分配Blue,但现在D没有有效的域名,所以我必须从B取消分配Green,但是,B没有域名,所以现在我必须从E取消分配绿色。现在,我可以继续将蓝色分配给E.我认为在完成此操作之后,现在有4个回溯(C-> D-> B-> E回溯顺序)所以看起来对于这个简单的例子大小为2的域名有效(这部分我在证明如何使用2d解决方案时有点模糊,在我看来最糟糕的情况是当你的E作业与你的作业不匹配时)到A,由于必须通过两半,你必须做2 * d?)
无论如何,我在CS188上模糊不清,多年来没有参加过这个课程,而且我曾经不得不回到算法的唯一时间就是学习面试lol。这很有趣,因为我是2014年的班级,但我想我在秋季上了这门课。
希望这有帮助。