二维模式匹配的最差时间复杂度

时间:2014-03-20 22:17:01

标签: algorithm pattern-matching time-complexity

使用强力算法进行2D模式匹配的最差时间复杂度是什么?

如果haystack-size = n needle-size = m(两者都是正方形),我觉得它是O(m ^ 2 * n ^ 2)。

我到达那里的方式是在m = 2和n = 4时使用一个简单的案例场景。如果我们在行中水平移动(匹配haystack中的mxm字符),我们进行m ^ 2字符串比较(n - 1)次。我们垂直重复(n-1)次。因此,time = m ^ 2(n-1)x(n-1)= m ^ 2 * n ^ 2-2 * m ^ 2 * n + m * 2 = O(m ^ 2 * n ^ 2)。

这种分析是否正确?是O(m ^ 2 * n ^ 2)还是O(m ^ 2 * n ^ 2 - 2 * m ^ 2 * n + m * 2)?

编辑:我只是比较两个字符串矩阵或类似两位矩阵。例如:

haystack = [["a", "b", "c", "d"],
            ["e", "f", "g", "h"],
            ["i", "j", "k", "l"],
            ["m", "n", "o", "p"]]
needle = [["j", "k"],
          ["n", "o"]]

1 个答案:

答案 0 :(得分:1)

为了匹配2个2D数组,找到所有子数组,我认为它是m * n * o * p(如果第一个数组是m * n,第二个数字是o * p),以确定是否有任何单个字符火柴。然后我会说你需要将它乘以较大数组的维数,因为这会给你可能的子数组。但毫无疑问,除了蛮力方法之外,这种做法更为明智,它以最小的匹配子阵列开始,并且可能使用动态编程智能地扩展它。我会研究子串匹配算法,因为这是类似的但是在2维中。