【问题标题】:count the appearance of a small binary matrix in a big binary matrix [closed]计算大二进制矩阵中小二进制矩阵的出现[关闭]
【发布时间】:2018-01-21 06:26:40
【问题描述】:

给定两个二进制矩阵 m1 和 m2,与 m1 相比,m2 保证具有更大或相等的大小(在两个维度上)。用 C++ 编写一个函数来计算 m1 在 m2 中的出现次数。 例如

m1 = [1 1;1 1], m2 = [1 1 0 0;1 1 0 0; 0 0 1 1;0 0 1 1]

那么m1在m2中出现了2次,函数应该返回整数2。

任何人都可以使用基于位操作的方法来有效地解决这个问题吗?

【问题讨论】:

  • SO 不是代码编写服务。
  • 仍在等待您面临的问题。
  • 你做过什么尝试吗?
  • 从蛮力和嵌套循环开始比较所有可能性,并使用您在蛮力解决方案中发现的模式来微调您的解决方案。
  • 是的,我会使用位技巧/操作来打包数据并并行执行更多位操作,而不是仅使用一些基本类型来存储单个位。上次加速大约是 300 倍。

标签: c++ algorithm image-processing matrix bit-manipulation


【解决方案1】:

如果你用游程编码来表示你的二进制模式,那么问题就变成了一个普通的字符串匹配一个压缩表示,并且不需要任何位摆弄。

然后您可以求助于标准算法,例如 Boyer–Moore,当发现不匹配时,您可以使用所有行中找到的最长移位。

【讨论】:

  • 直觉上,我考虑过使用位技巧,因为这 2 个矩阵是二进制矩阵。但我随后意识到,简单地将矩阵的行转换为无符号长整型具有大小限制。感谢字符串匹配的想法!
猜你喜欢
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多