我不擅长计算算法的复杂性。填充M×N矩阵的时间复杂度是O(MN)。是的,我理解,因为NxM是细胞填充的数量。我知道我们可以计算最佳案例,平均案例和最坏情况。
例如这个4x4矩阵。我们只填充对角线(D)和一个对角线上侧dan下侧主对角线(x)。我知道复杂度是O(3M-2)因此我们有3.4-2 = 10。
|D x |
|x D x |
| x D x|
| x D|
但我无法详细解释如何获得3M-2。我只是通过反复试验来运用我的想象力。如果N = M,这是我最好的情况。对于最坏的情况,我们必须填充第一主对角线(D1),第二主对角线(D2),D1和D2(D)之间的单元以及一个单元上侧和下侧主对角线(x)。我所知,复杂度为O(2 * M +(M-N-1) N + 2 (N-1))
其中M = 9(max [row,col])且N = 6(min [row,col])。请参阅下面的示例
|D1 D D D2 x |
|x D1 D D D2 x |
| x D1 D D D2 x |
| x D1 D D D2 x |
| x D1 D D D2 x |
| x D1 D D D2|
填充区域= 2 * 9 +(9-6-1) 6 + 2 (6-1)= 34。
2 * M代表D1和D2。
(M-N-1)* N表示D.
2 *(N-1)代表x
但我不知道如何以数学方式写这个。我的意思是如何在结构上进行描述?我只想计算填充矩阵某些部分的复杂性。感谢。
答案 0 :(得分:0)
在每个'完整'对角线中,你有N个元素。 有M-N + 1个完整对角线,因为从(1,1)开始的对角线以(N,N)结束,但最后一行在最后一行有M个元素。
您想要添加上下对角线,每个对角线都有(N-1)个元素。因此,您的复杂性是:
O(N(M-N+1) + 2(N-1)) = O(NM - NN + N + 2N - 2) = O(NM-NN+3N) = O(N(M-N+3))