问题描述
我有两个不同大小的二维数组,我们称它们为 main 和 pattern。 Main 可以是任何大小(可能高达 60+?),总是大于模式的大小,我的模式总是大小为 2 或 3 的正方形
为了简单起见,我们假设这些值可以简化为整数(或字符串)。
例如:
主要内容:
0,2,3,1,0
1,0
0,0
模式示例:
1,2
0,0
0,0
2,1
0,0
1,3
1,0
如果主数组中存在任何模式,最重要的是检索所有受影响单元格的索引,那么搜索的方法是什么?
我开始考虑这个问题:
- 以某种方式存储我的模式的第一个非空单元格的位置(以说明模式开头的空单元格、行或行)
- 循环遍历 Main 数组的每个单元格(因此已经嵌套了 2 个 for 循环)
- 对于这些单元格中的每一个,检查它是否等于我的模式的第一个非空单元格的值(存储在上面)
- 如果是这种情况,请开始 2 个额外的嵌套循环,以我的模式的剩余大小来检查 X 和 Y 中的每个后续单元格是否与我的模式的非空单元格匹配。
- 如果以下任何单元格与我的模式的非空部分不匹配,则丢弃它并继续主循环。
如果我们采用第一个示例模式,我在此处的搜索结果应返回我在此处突出显示的单元格的位置:
(我想我可以从我得到的第一场比赛的位置再次计算,当然:))
但这样做听起来有点过分,考虑到我最终可能会拥有一个大于 10*10 的主阵列方式,甚至多个主阵列来检查。 由于我需要对多个模式执行此操作,并且我正在考虑添加某种通配符值,该值可能与主数组中的任何非 0 匹配,这可能很快就会失控......!
所以我想知道是否有更优雅、更轻松的方式来做到这一点?
我读过关于将我的二维数组折叠成一个单维数组并对其执行模式匹配,但我必须承认它的逻辑现在有点超出我的头脑,我不知道从哪里开始从这个开始,我什至不确定那是我应该做的......? (我发现的大部分关于此的内容都是锁定在付费墙后面的研究论文......)
非常感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)