代码之家  ›  专栏  ›  技术社区  ›  Benjamin Oakes

拉丁方格发生器?(类似数独的约束问题)

  •  0
  • Benjamin Oakes  · 技术社区  · 15 年前

    目的

    我们正在设计一个拉丁方(类似数独的序列),用于需要遵循这些约束的实验设计:

    • 值不能在一行中重复
    • 值不能在列中重复
    • 值不能在任何两行中成对重复

    前3个约束的示例:

    2     3    5    7    11   13
    7     2    11   3    13   5
    11    5    2    13   7    3
    3     7    13   2    5    11
    5     13   3    11   2    7
    13    11   7    5    3    2 
    

    这里,我们选择素数,但是值是任意的(只要有6个不同的值)。请注意,它与6 x 6网格中的数独相同,附加的约束是行之间不存在重复对(也就是说,bigrams)。也就是说, 2 3 只出现在第一行,但不出现在其他行中,以此类推。

    • 值应与另外6个符合这些约束的值配对:
      • 第二组值不能在一行中重复
      • 第二组值不能在列中重复
      • 与第一组值配对时,第二组值不能重复。

    也就是说,我们需要另外六个值(同样,任意——它们可以是“a,b,c,d,e,f”),与前六个值配对。最后一个约束意味着如果使用( 2 ,a) 在任何地方 ,您不能再使用它。

    最后一个第二组约束是问题所在。对于n x n网格,n=6,没有解决方案。那是工作中的活扳手。我们希望尽可能减少重复次数,使“排序”有点像一对正交的拉丁方格。

    问题

    你以前遇到过这个问题吗?(如果有一个工具可以生成解决方案,那就太好了。)我们只需要一个这样的例子就可以了。我们已经尝试了几种不同的建设策略。

    我们正在调情为它写一个解算器的想法,但是如果已经有了一些东西,我们想避免这样做。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Rubens Farias    15 年前

    看一看: Dancing Links

    在计算机科学中,Dancing Links(也称为DLX)是Donald Knuth为有效实现其算法X而提出的技术。算法X是一种递归的、不确定的、深度优先的回溯算法,可以找到精确覆盖问题的所有解。一些更为著名的精确覆盖问题包括瓷砖、N皇后问题和数独。

        2
  •  0
  •   Benjamin Oakes    15 年前

    我们写了一个解算器,它随机排列解,并在一夜之间运行后获得了可用的最佳平衡解。这可能不是最好的方法,但是由于约束条件不存在完美的解决方案,我们认为它应该比其他寻找“不那么糟糕”的解决方案的方法更好。

    推荐文章