在文本正文中找到一个ASCII艺术图像,并具有一定的容错性

mag*_*ter 8 java algorithm search ascii-art

是否有任何算法可以找到以下ASCII艺术图像?

     +
     +
    +++
  +++++++
  ++   ++
 ++  +  ++
 ++ +++ ++
 ++  +  ++
  ++   ++
  +++++++
    +++
Run Code Online (Sandbox Code Playgroud)

在下面的文本体内?

complete_file_here

              + +    +              ++           +       +++    +     +
 +  ++     +   + ++++    + +       +         +          +  +   +++     +++ +
     +            + +   ++      ++  ++    + ++       +     +      +  +   +
+   ++      +  ++       +          + +       ++        ++  +           +
 ++++++ + +    +   ++  +  +   +   +  ++      +         +                     +
  + +   +      +               +      ++     +  ++            +   +    + +
+++   + ++   +  +            +  +++       + +       ++                     +
  +++++  +      +                            +  + +            +   +  +
 +   +   +              +    +      +            +  +   +      +    +     +
 ++    +              +     +       ++   +          +       +           ++
Run Code Online (Sandbox Code Playgroud)

我必须突出显示黄色的ASCII艺术图像,它对应于完整的形状.见附图:

在此输入图像描述

我必须搜索包含粗糙形状的文件,但不完全,+可能会丢失一些文件.+应该手动设置形状中缺失的容差.

现在,我有两个2D数组数据数组:[100] [100]和SlimeTorpedo数组:[13] [11].

@kjartan所述的如何进行检测的代码(3-4子弹):

     int match = 0;
     for (int i = 0; i < 100; i++) {
         for (int j = 0; j < 100; j++) {
             //Compare DataArr[i][j] with SlimeTorpedoArr[i][j]
             //Look for "checked" position in the picture ("+"), 
             //which corresponds to a checked position in the 
             //slime torpedo array.
             //match++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题的一般指导是什么?

Juv*_*nis 4

假设您的第一个形状的宽度和高度参数(以字符数计)是已知的。让他们成为widthheight

  • 将您的输入编码为二维位数组(或+号)。所以你已经 int[][] inputBits = new int[height][width];并且应该正确填充它。(这是你的任务,伙计。)
  • 然后对较大的形状应用简单的搜索(假设它也被编码到另一个 2D 数组中)。每次将枢轴区域右移一位(枢轴区域等于第一个形状的面积),并检查枢轴区域(二维数组)的所有元素是否等于第一个形状。这是一个蛮力算法 =)

  • 只会找到完全匹配,需要对不完整匹配进行一些调整,但如果没有关于构成匹配的规范,我会说这个问题是无法回答的。 (2认同)