使用动态编程的8-queen问题

时间:2011-08-14 08:51:21

标签: algorithm dynamic-programming n-queens

我对使用动态编程实现8-queen问题的想法很困惑。似乎DP的一端不可能“如果问题被分解为一系列子问题并且找到了每个子问题的最优解,那么所得到的解决方案将通过这些子问题的解决方案来实现。没有这种结构的动态编程“(Reference)无法解决。考虑到这一点,7x7电路板的最佳解决方案可能也不是8x8的最佳解决方案(甚至不正确)。因此,问题的结果可能无法通过子问题的最优解来实现。

另一方面,DP是回溯问题的优化......如果是这样的话,那么8-queen问题可以通过回溯来解决......这是否意味着通过仅存储死角可以将回溯解决方案转换为DP?如果是这样,则2,1对于父1,1可能不可行,但对于1,2可能是可行的。

更新

任何人都知道使用动态编程是否可以解决8-queen或n-queen问题?如果是,那么您对上述观察的评论是什么?

2 个答案:

答案 0 :(得分:3)

对于8x8,

7x7电路板的最佳解决方案可能也不是最佳解决方案(甚至不正确)。

是的,你是对的。但这不是解决问题的好方法。查看paper yi_H posted in his answer,定理2.4,并查看算法描述。他们根据闭合线集(即受皇后威胁的线)将解决方案划分为等价类。定理2.4保证一旦他们解决了特定闭合线上的子问题,他们可以分别解决其余部分,然后结合结果!非常聪明。

答案 1 :(得分:1)

发布明显的谷歌热门:

A dynamic programming solution to the n-queens problem

注意:对于大n,O(f(n)* 8 ^ n),这仍然非常慢,你最好使用其他算法:

A Polynomial Time Algorithm for the N-Queens Problem