我怎样才能评估图形着色拼图的难度?

时间:2011-04-01 13:07:08

标签: algorithm language-agnostic graph graph-theory

我正在开发一个小的HTML Canvas&基于JavaScript的游戏训练我自己,我选择创建一个地图着色益智游戏。

我最初计划使用给定算法解决难题的时间来设置难题,但我最终选择实施强力求解算法。其他算法对我来说太复杂了,因为我没有找到一些明确的资源,其中很好地解释了最佳3或4可着色性的算法。

我的问题是可以制作一些棘手的谜题,因此蛮力解决需要很长时间,而另一种解决方法仍然可以轻松解决难题。

那么,您如何确定地图着色拼图的相对难度?

3 个答案:

答案 0 :(得分:4)

您的地图是非定向图。顶点是要填充颜色的表面,边缘是连接邻居 当每个表面上的邻居数量很少时,一个难题的难度很低。一个难题是每个顶点都有很多边缘的难题 因此,对谜题进行排名的方法就是:

difficulty = total_number_edges - total_number_vertices

一个天真的人。您现在可以通过添加不同的其他变量来改进此公式,例如顶点中的最大边数或顶点总数(具有大量要填充的曲面的拼图更难以花费更多时间)

difficulty = (total_number_edges - total_number_vertices)  
                        * (total_number_vertices / max_edges_in_vertex)

你应该是主公式的发明者:)

答案 1 :(得分:1)

地图/图形着色问题是“NP完全”。这意味着科学界几乎可以肯定,任何给定的问题算法都会在某些问题实例(即谜题)上花费指数(巨大)的时间。这就是为什么你实现的任何算法(包括你的“蛮力”机制)会阻塞一些拼图实例。

我建议您使用几种不同的算法来解决您的难题,例如

  • 算法1 - 逐个选择一个随机区域,并给它一个仍然“适合”的颜色,即不是任何彩色邻居的颜色。如果遇到冲突(无法为所选区域着色),请停止算法。运行此循环,比如N次,并计算循环实际着色整个地图的次数;让它成为K.这里得分K / N(百分比),0%=难题(可能不可能),100%=非常容易的问题

  • 算法2 - 向算法1添加一定量的回溯,例如允许最多1,000个回溯步骤。运行相同的“采样”循环。你得到另一个分数0%-100%。

然后使用得到的分数(你会得到更高的分数来自Alg.2,而不是来自Alg.1,因为它更强大)来获得谜题的相对难度。

这一切的关键在于,如果你得到分数(0%,0%),即你不知道谜题是否可以解决,你就丢弃它,因为你不想呈现你的观众问题这可能是无法解决的:)

最后使用你自己的判断将分数“映射”为“人类可读”难度描述---挑选几个谜题,手工解决,检查你的程序计算的分数,然后看看百分比分数如何映射到你对困难的看法。

答案 2 :(得分:0)

我找到了一个段落,让我了解了如何评估难度。

  

一类近似算法是   基于“贪婪”方法 - 顶点按顺序处理,每个顶点分配到最低点   编号的颜色类,不会使它发生冲突   与以前有色的邻居。因为   与当前顶点相邻的顶点可能使用全部   四种颜色,五分之一,甚至六分之七,七等颜色   可能是必要的。当贪婪的方法需要时   创建一个顶点所在的新颜色类   impasee。

所以必要的颜色类数量可能是你拼图的难度。你可以处理顶点,例如从最高程度到最低程度(订购架构最大的第一

我在 Raymond A.Archuleta Henry D. Shapiro <文章一个快速概率算法四色大平面图中找到了引用的段落。 / em>的