gpt4 book ai didi

c++ - 在大矩阵中找到一个矩阵

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:59 25 4
gpt4 key购买 nike

我有一个非常大的 n*m 矩阵 S。我想有效地确定在 S 内部是否存在子矩阵 F。大矩阵 S 的大小可以达到 500*500

为了澄清,考虑以下几点:

S = 1 2 3 
4 5 6
7 8 9

F1 = 2 3
5 6

F2 = 1 2
4 6

在这种情况下:

  • F1S
  • 里面
  • F2 不在 S

矩阵中的每个元素都是一个32 位 整数。我只能想到使用暴力法来查找F 是否是S 的子矩阵。我用谷歌搜索找到了一种有效的算法,但我找不到任何东西。

是否有一些算法或原理可以更快地完成它? (或者可能是一些优化蛮力方法的方法?)

PS统计数据

A total of 8 S
On average, each S will be matched against about 44 F.
The probability of success match (i.e. F appears in a S) is
19%.

最佳答案

它涉及对矩阵进行预处理。这会占用大量内存,但在计算时间方面应该会更好。

  • 检查前检查子矩阵的大小是否小于矩阵的大小。
  • 在构建矩阵时,构建一个结构,将矩阵中的值映射到矩阵中的 (x,y) 位置数组。这将允许您检查是否存在候选可能存在的子矩阵。您将使用子矩阵中 (0,0) 处的值,并获取该值在较大矩阵中的可能位置。如果职位列表为空,则您没有候选人,因此子矩阵不存在。这是一个开始(然而,更有经验的人可能认为这是一种幼稚的方法)。

关于c++ - 在大矩阵中找到一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com