【发布时间】:2018-03-26 12:25:12
【问题描述】:
我有一个更大的二维字符网格NxN(2 <= N <= 800)。我得到了一个较小的KxK( 2 <= K <= 100) 二维网格。例如,让 N = 3 和 K = 2 以及以下是矩阵,
更大:
abc
abd
aaa
更小:
bd
aa
问题 1: 如果较大的矩阵包含较小的矩阵,我必须返回。例如上面较小的矩阵匹配较大的矩阵。
问题 2:如果找到,我必须返回 NxN 上的凝视位置混搭部分。上面的例子返回匹配并且 position = (1, 1) #0 based
我的假设:
我的假设是使用散列。但如果有任何更好的想法来有效地搜索。例如,我可以创建一个哈希函数,它将为所有有效位置的 NxN(2x2、3x3、4x4、...、100x100,因为 K 可以达到 100)中的所有可能的正方形生成索引
(0,0), (0,1), ..., (0, N-K)
(1,0), (1,1), ..., (1, N-K)
. .
. .
(N-K,0), (N-K, 1) .... (N-K, N-K)
然后我可以在相关索引中保留位置,当输入 KxK 出现时,我只需运行相同的哈希函数并查看返回的索引是否有位置。
【问题讨论】:
-
如果您搜索图像处理算法以在图像中找到子图像,您可能会找到相关的东西。
-
如果你有的话,比尔可以分享一下
-
也许这个问题可以通过将KMP算法泛化到2D(如果可能的话)来解决。
-
请分享您的哈希方法的详细信息,否则我们无法知道它已经有效。
-
@MrSmith42 请看我的更新
标签: algorithm multidimensional-array hash