查找给定矩阵的子矩阵

2023-12-13

我正在尝试编写一种算法来在给定的子矩阵中查找子矩阵。为了解决这个问题我编写了以下代码:

public class SubMatTry {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int a[][] = { { 2, 3, 5, 7 }, { 5, 8, 3, 5 }, { 7, 6, 9, 2 },
            { 3, 8, 5, 9 } };
    int b[][] = { { 9, 2 }, { 5, 9 } };
    int k = 0;
    int l = 0;
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            System.out.println("Element of a= " + a[i][j]);
            if (b[k][l] == a[i][j]) {
                System.out.println(b[k][l] + " = " + a[i][j]);
                if (b[k][l + 1] == a[i][j + 1]) {
                    System.out.println(b[k][l + 1] + " = " + a[i][j + 1]);
                    if (b[k + 1][l] == a[i + 1][j]) {
                        System.out.println(b[k + 1][l] + " = "
                                + a[i + 1][j]);
                        if (b[k + 1][l + 1] == a[i + 1][j + 1]) {
                            System.out.println(b[k + 1][l + 1] + " = "
                                    + a[i + 1][j + 1]);
                            System.out.println("Array found at" + i + " ,"
                                    + j);
                            System.exit(0);
                        }
                    }
                }
            }
        }

    }

}}

这段代码工作正常,但我不确定它是问题的确切解决方案还是只是一种解决方法。请专家提出您的意见。提前致谢。


该算法针对 4×4 矩阵和 2×2 子矩阵进行硬编码。否则,作为一种暴力算法,它看起来不错。

我会表达如下:

outerRow:
for (int or = 0; or <= a.length - b.length; or++) {
    outerCol:
    for (int oc = 0; oc <= a[or].length - b[0].length; oc++) {
        for (int ir = 0; ir < b.length; ir++)
            for (int ic = 0; ic < b[ir].length; ic++)
                if (a[or + ir][oc + ic] != b[ir][ic])
                    continue outerCol;
        System.out.println("Submatrix found at row " + or + ", col " + oc);
        break outerRow;
    }
}

如果你想要更高效的东西,我建议你将它们展平,如下所示:

{ 2,3,5,7, 5,8,3,5, 7,6,9,2, 3,8,5,9 }

并在此序列中搜索以下模式:

{ 9,2, _, _, 5, 9}

使用标准的查找子字符串技术,例如阿霍-科拉西克 or Knuth-Morris-Pratt 算法。 (请注意,您必须跳过一些索引,以避免在序列中间出现新行时出现误报。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找给定矩阵的子矩阵 的相关文章

随机推荐

  • NSString 反斜杠转义

    我正在开发一个 iPhone OS 应用程序 该应用程序向 Web 服务发送 xml 请求 为了发送请求 xml 被添加到 NSString 中 这样做时我遇到了一些引号问题 和反斜杠 在 xml 文件中 需要转义 是否有需要转义的字符的完
  • R 中的 Bootstrap 置信区间

    我是 R 新用户 在使用启动包时遇到问题 我想要做的就是使用 bootstrapping 来生成围绕数字向量均值的置信区间 例如 x lt rnorm 100 1 5 有小费吗 以下还不够吗 library boot x lt rnorm
  • 了解 rowwise() 和 c_across()

    您好 任何人都可以提供外行人的解释 为什么这两种尝试计算分数的行平均值的方法效果不同 谢谢 library tidyverse var1 lt rnorm 100 var2 lt rnorm 100 var3 lt rnorm 100 df
  • 如果 URL 包含特定字符串,则 htaccess 重定向

    我该如何写一个 htaccess如果 URL 包含某个单词 则重定向规则 例如如果它包含foobar然后重定向到index php RewriteCond REQUEST URI foobar RewriteRule index php o
  • 如何写入 Python 子进程的标准输入?

    我正在尝试编写一个启动子进程并写入子进程标准输入的Python 脚本 我还希望能够确定子进程崩溃时要采取的操作 我试图启动的进程是一个名为nuke它有自己的内置 Python 版本 我希望能够向其提交命令 然后在命令执行后告诉它退出 到目前
  • 如何在 Java 中创建唯一 ID? [复制]

    这个问题在这里已经有答案了 我正在寻找在 Java 中创建唯一 ID 作为字符串的最佳方法 任何指导表示赞赏 谢谢 我应该提到我正在使用 Java 5 创建一个UUID String uniqueID UUID randomUUID toS
  • Chrome 调试器 Api 附加扩展错误

    Task 使用调试其他扩展Chrome 调试器 API 预期输出 其他已安装扩展发出的 http 请求日志 Method 在 python 设置标志中使用 selenium 运行 chrome webdriverchromeopts add
  • 如何使用 VBScript 从驱动器号获取硬盘号

    如何使用 VBScript 从驱动器号获取硬盘号 先感谢您 Remou 关于 WMI 的看法是正确的 只是需要让它变得更混乱一点 如果有更简单 更好的方法来执行此操作 一点也不会感到惊讶 但此脚本至少应该为您提供一个良好的起点来完成您需要的
  • 使用安全登录进行 PHP 网站抓取

    我正在尝试减少我的一位经销商的每种产品的库存数量 他们不知道如何导出这些数据 所以我想知道是否有人可以帮助我指明如何使用 PHP 抓取必须登录才能获取数据的网站的正确方向 它不是一个使用 SSL 的安全站点 感谢您的任何提示 克里斯 爱德华
  • C 中是否有 strtoull() 函数的替代方案?

    我需要转换char to unsigned long long int有一个函数叫做strtoull in the C标准库 但需要很多时间 我需要在之间快速转换char to unsigned long long int 如何编写比标准转
  • 日期列中的 Kendo 网格格式时间问题[重复]

    这个问题在这里已经有答案了 我有一个剑道网格 它有一个日期列 我想在那里显示日期和时间 我在列定义中使用以下格式 format 0 dd MMM yyyy hh mm ss tt 在模态中我使用了日期类型Updated Date type
  • UnsupportedAudioFileException 的解决方法?

    我正处于用 Java 编写小型音乐 节奏游戏的早期阶段 通过 Slick 框架 该框架又使用 OpenAL 但这可能与这里无关 游戏需要读取 并播放 多个 WAV 格式的声音文件 但某些文件抛出 javax sound sampled Un
  • 在 cookie 中存储数组

    我需要在 cookie 中存储一些数组数据 我一直在研究最好的方法来做到这一点 很多人似乎说使用serialize是要走的路 但在这个线程中 PHP如何字符串化数组并存储在cookie中 有人建议不要使用它 因为 序列化将调用序列化类的构造
  • 在函数中使用 dplyr group_by

    我试图在本地函数中使用 dplyr 的 group by 例如 testFunction lt function df x df gt group by x gt summarize mean Petal Width mean Petal
  • 使用 Bootstrap Datepicker 时如何获取选定的日期值?

    使用 jquery 和 Bootstrap Datepicker 如何获取我使用 Bootstrap Datepicker 选择的新日期值 仅供参考 我正在使用 Rails 3 和 Coffescript 我使用以下方法设置日期选择器
  • 具有多对多关系的 MVC4 控制器

    我有两个实体 Arena 和 Regulator 它们之间具有多对多的关系 我已经实现了 EF 代码首先接受的解决方案 见下文 我现在一直致力于实现控制器视图 以便当用户创建调节器时 他可以选择一个或多个竞技场 可能使用复选框或多选列表 并
  • 通过 xpath Selenium java 选择具有动态生成的 id 的 WebElements

    我需要在下拉窗口中选择一个元素 每次我在正在测试的网站中打开下拉窗口时 网站都会随机生成该下拉窗口的 ID 下拉窗口的先前实例可见 使用 Firebug 但不可选择 有一个静态路径 但仅当我使用 ChromeDriver 测试它时才有效 而
  • 用于任意对象的 python 哈希函数的替代方案

    在python2 7中 我成功使用hash 将对象放入持久存储在磁盘上的存储桶中 样机代码如下所示 class PersistentDict object def setitem self key value bucket index ha
  • 基本 Docker 容器报告运行级别未知

    当我像这样运行一个基本的 Docker 容器 从 Google Cloud Shell 中 时 docker pull debian docker run i t debian wheezy bin bash 然后输入runlevel在运行
  • 查找给定矩阵的子矩阵

    我正在尝试编写一种算法来在给定的子矩阵中查找子矩阵 为了解决这个问题我编写了以下代码 public class SubMatTry param args public static void main String args TODO Au