这个难题背后的理论是什么?

时间:2016-08-24 14:14:50

标签: algorithm math graph theory combinatorics

我最近遇到了上面的益智游戏。目标是形成一个大三角形,使相邻三角形上的图形部分的形状和颜色相匹配。

解决此问题的一种方法是应用详尽的搜索并测试每种可能的组合(大约7.1e9)。我写了一个简单的脚本来解决它(github)。

由于这个难题已经很久了,因此强行解决这个问题可能并不可行。那么,解决这个问题的更有效的方法(算法/数学理论)是什么?

2 个答案:

答案 0 :(得分:3)

这相当于Edge-matching问题(带有一些正多边形),当然 np-complete (我假设近似值有更多的负面结果)。这意味着,存在很难解决的难题(至少如果P!= NP)。

一个有趣的旁注:有一个非常受欢迎的(商业)边缘匹配拼图叫Eternity II,奖金价值200万美元。据我所知,它仍然不动。

这个问题导致了很多尝试和博客写作,它们可以为你解决这些问题提供很多帮助。

失败(根据:没有解决全尺寸的E2谜题;但是其他困难的谜题)方法应该比穷举搜索(没有启发式方法)好得多:

  • SAT-solving(在我看来,最强大的完整的方法)
  • 约束编程
  • 常见的Metaheuristics(调整到某些问题统计时有很多潜力)

一些有趣的资源:

  • 复杂性理论:Demaine, Erik D., and Martin L. Demaine. "Jigsaw puzzles, edge matching, and polyomino packing: Connections and complexity." Graphs and Combinatorics 23.1 (2007): 195-208.

  • 一般硬度分析(实用):Ansótegui, Carlos, et al. "How Hard is a Commercial Puzzle: the Eternity II Challenge." CCIA. 2008.

  • SAT解决方法:Heule, Marijn JH. "Solving edge-matching problems with satisfiability solvers." SAT (2009): 69-82.

  • 边缘匹配作为基准(由于硬度):Ansótegui, Carlos, et al. "Edge matching puzzles as hard sat/csp benchmarks." International Conference on Principles and Practice of Constraint Programming. Springer Berlin Heidelberg, 2008.

答案 1 :(得分:0)

解决此类问题的一种常见方法是使用回溯

你选择一个起始位置,放下一个瓷砖,然后尝试在邻近的地方找到它的匹配。当你遇到困难时,你会备份一个,并在那里尝试替代方案。

最终你已经尝试了所有可能性,而没有为大量的死胡同而烦恼。一旦你陷入困境,以任何方式填补其余部分毫无意义,因为你仍然会被困在那一点。

最近,Knuth将他的 Dancing Links 算法应用于此类问题,从而获得了更高的效率。

对于你的例子大小的问题,只有9件和两个“颜色”,所有解决方案最多只能在几秒钟内找到。