【问题标题】:How could I evaluate the difficulty of a graph-coloring puzzle?我如何评估图形着色谜题的难度?
【发布时间】:2011-07-27 16:40:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 感谢大家的优质回答!

标签: algorithm language-agnostic graph graph-theory


【解决方案1】:

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

difficulty = total_number_edges - total_number_vertices

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

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

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

【讨论】:

  • 我进行了试验和研究,得出的结论是,对于每种算法,人们都可以找到一类需要花费大量时间才能解决的难题。作为人类,我相信我们学得很快,并且可以根据谜题调整我们的策略。所以我决定听从你的建议,并采取一些改进的幼稚方法。
【解决方案2】:

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

我建议你实现几种不同的算法来解决你的难题,例如

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

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

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

整个事情的关键是,如果你得到分数 (0%,0%),即你不知道谜题是否可以解决,你就放弃它,因为你不想向观众展示问题这可能是无法解决的:)

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

【讨论】:

  • 确定平面图的色数是NP完全的。当我第一次阅读您的答案时,我认为您的意思是为图形着色是 NP 完全的,但事实并非如此。有一些算法可以用 4 种颜色、5 种颜色为平面图着色,...
  • 呃,这不是真的。即使在平面图上,着色本身也是 NP 完全的。检查任何标准参考。此外,所有平面图都是 4 色的。这就是著名的四色定理。
  • 我从 N RobertsonDP SandersP SeymourR Thomas 那里读到 Efficiently four-coloring planar graphs ,用 k 种颜色为平面图着色是:如果k <= 2 or k >= 6(如果可能,k k = 5 存在线性算法,k = 4 存在二次算法。还有一个site 简要总结了二次算法的四色定理
  • 嗯,你当然是对的,但这并不与 NP 完备性相矛盾。维基百科:“图着色在计算上是困难的。除了 k = 1 和 k = 2 的情况外,决定给定图是否允许给定 k 的 k 着色是 NP 完全的。尤其是 NP 难以计算色数。即使在 4 次平面图上,3 色问题仍然是 NP 完全的。”关键在于,一个 4 色图也可以是 3 色图,检查这一点是 NP 完全的。
【解决方案3】:

我找到了一段让我知道如何评估难度的段落。

一类近似算法是 基于“贪婪”方法 - 顶点按顺序处理,每个顶点分配给最低的 编号的颜色类,不会将其置于冲突中 和它以前有色的邻居。因为 与当前顶点相邻的顶点可能使用所有 四种颜色,第五种,甚至第六种,第七种等颜色 可能是必要的。当贪心方法需要 创建一个顶点所在的新颜色类 僵持。

因此,必要的颜色类别数量可能是您的难题的难点。您可以处理顶点,例如从最高程度到最低程度(排序模式最大优先

我在 Raymond A. ArchuletaHenry D. Shapiro 的论文 A Fast Probabilistic Algorithm For Four-Coloring Large Planar Graphs 中找到了引用的段落/em>

【讨论】:

  • 但是必要的颜色等级的数量是 2、3 或 4。所以你不能真正将难度扩展到 3 个数字。并不是说 4 色拼图很容易,因为它们也可能变得非常复杂。
  • @iuliux:不,以确定的顺序(例如最大的优先)迭代所有节点的贪心方法找不到最小必要颜色的数量(色数 )。可能需要第五、第六、第七等颜色。所需颜色的数量可能是难度的一个指标。
猜你喜欢
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多