代码之家  ›  专栏  ›  技术社区  ›  A. Rex

快速二维模式匹配

  •  5
  • A. Rex  · 技术社区  · 15 年前

    考虑二维网格(平面中常见的网格)。出于我的目的,a 模式 安排 是将数字1和2分配给网格点的某些连接子集。例如,下面显示了三种不同的安排:

    .......1.....1....
    .222...2.....12...
    .111...2.....2....
    .222...22...12211.
    .......1....11.1..
    

    我说,如果小图案可以旋转或反射,使其所有数字都小于大图案中的数字,则小图案与大图案匹配。例如,考虑这个模式:

    ......
    .1212.
    ....2.
    ......
    

    它与上面最左边的排列不匹配,因为它不能旋转或反射以适合3x3正方形。它确实与中间的排列相匹配,因为它可以旋转和反射以适合下面。但是,它与最右边的排列不匹配,因为不管它是旋转还是反射以适合最右边的排列,数字在小模式中比大模式中大。(如果我的任何例子不清楚或您需要更多信息,请在评论区询问。提前澄清:图案不能拉伸,也不能旋转,因此相对于网格是对角线。这意味着总共有四个旋转和四个反射,每个都可以转换。)

    我想知道以下问题:

    1. 如何快速测试一个小的模式是否匹配一个大的排列?

    2. 假设我有很多小图案。我能通过某种方式预先处理它们来快速判断 至少一个 他们中的一个符合安排?

    我想,如果一个解决方案能解决一个更普遍的问题(比如任意数字——不仅仅是1和2——或者允许不连续的形状),那就太酷了,但我只关心上面的情况。谢谢。

    1 回复  |  直到 12 年前
        1
  •  5
  •   Luka Rahne    15 年前