我正在阅读Anany Levition设计和分析算法简介中的反向跟踪算法。
以下是我所指的页面。
这里作者提到如下。
有一些技巧可能有助于减少状态空间树的大小。一个是利用组合问题中经常出现的对称性。例如,n-queens问题的板具有几个对称性,因此可以通过反射或旋转从其他解决方案获得一些解决方案。这特别意味着我们不需要考虑最后一层(n / 2)列中第一个女王的位置,因为任何解决方案中第一个女王在正方形(1,i),天花板(n / 2)<1。 = i <= n,可以通过从第一个正方形(1,n-i + 1)的解的反射(哪个?)获得。这个观察结果将树的大小减少了一半。
我对上述文字的疑问是
作者通过利用组合问题中常见的对称性来表示什么意思?
作者在上述背景下的反思是什么意思?
在上面给出的例子中,作者的意思是通过以下陈述“我们不需要考虑最后一层(n / 2)列中第一个女王的位置,因为任何解决方案中第一个女王的方形(1, i),ceiling(n / 2)&lt; = i&lt; = n,可以通过从第一个正方形(1,n-i + 1)“的解的反射(哪个?)得到? 这里请求示例n = 4。
答案 0 :(得分:0)
我将尝试通过示例回答问题的简化变化,这是相同的皇后问题,但是在4x4板上。
问题的一个可能解决方案是(1,2),(2,4),(3,1),(4,3)
_ _ Q _
Q _ _ _
_ _ _ Q
_ Q _ _
另一种解决方案是(2,1),(4,2),(1,3),(4,3):
_ Q _ _
_ _ _ Q
Q _ _ _
_ _ Q _
然而,通过生成一个解决方案,我可以立即创建另一个解决方案,无需继续搜索,只需遍历女王的坐标。
同样的事情则相反。如果我发现没有以女王(1,1), (2,1), (_,_), (_,_)
Q Q _ _
_ _ _ _
_ _ _ _
_ _ _ _
我事先还可以修剪以女王(1,1),(1,2),(_,_),(_,_)
开头的所有解决方案:
Q _ _ _
Q _ _ _
_ _ _ _
_ _ _ _
使用这个问题的对称属性,每当我回溯并修剪一个不成功的分支时,我实际上也可以修剪其他对称分支。