Algorithm 二维矩阵的算法搜索

Algorithm 二维矩阵的算法搜索,algorithm,multidimensional-array,hash,Algorithm,Multidimensional Array,Hash,我有一个更大的2d字符网格NxN(2这个问题的诀窍是使用一个哈希函数,当你移动一个位置时,你可以在O(1)中更新它。这将把复杂性降低到O(N^2) 这种散列函数的一个例子是h=sum(x[i]*2^i)%some\u large\u prime\u number。其中x[i]是第i个字符的ascii码。要更新 h_new = ((h_previous - (x[position_to_remove] * 2^k)) * 2 + (x[position_to

我有一个更大的2d字符网格
NxN
(2这个问题的诀窍是使用一个哈希函数,当你移动一个位置时,你可以在O(1)中更新它。这将把复杂性降低到O(N^2)

这种散列函数的一个例子是
h=sum(x[i]*2^i)%some\u large\u prime\u number
。其中
x[i]
是第i个字符的ascii码。要更新

h_new = ((h_previous -
          (x[position_to_remove] * 2^k)) * 2 +
          (x[position_to_add] * 2^0
        ) % some_large_prime_number`
哈希函数不是很强,因此会出现一些误报。 为了提高匹配的可信度,用几个不同的大素数重复该算法。它仍然会产生误报,但很少


注意:请小心选择不会使整数类型溢出的素数。您也可以对中间结果应用“%”运算以防止溢出。此外,在大多数语言中,对于负数输入,“%”模运算将返回负数(在执行减法运算时,您需要自己进行换行).

似乎与C标记无关…如果您搜索图像处理算法以查找图像中的子图像,您可能会找到相关信息。如果您有任何信息,我可以与Bill共享删除了C标记。为什么要进行向下投票?请共享您的哈希方法的详细信息,否则我们无法知道它是否有效。
bd
aa
(0,0), (0,1), ..., (0, N-K)
(1,0), (1,1), ..., (1, N-K)
. .
. .
(N-K,0), (N-K, 1) .... (N-K, N-K)
h_new = ((h_previous -
          (x[position_to_remove] * 2^k)) * 2 +
          (x[position_to_add] * 2^0
        ) % some_large_prime_number`