给定平方二进制矩阵,计算具有特定和的子矩阵的数量

时间:2016-11-05 02:22:38

标签: c algorithm matrix

假设我们给出了一个NxN平方和二进制矩阵和一个正数K.我们需要找到子矩阵的数量,这样每个子矩阵的值之和等于K.我试过使用a的思想总结区域表如下所述:Calculate the sum of elements in a matrix efficiently

在这里:Calculate the sum of elements in a matrix efficiently

但我最好的解决方案有一个O(n ^ 4)的复杂性,因为我需要检查每个可能的子矩阵,而不仅仅是上面链接上的一个子矩阵。任何帮助都会非常感激。

编辑:抱歉没有清除它。因此,如果输入矩阵是3x3 {001} {010} {000}且K = 1,则输出应为17,这意味着我们已经找到了每个可能的子矩阵,其值的总和等于K.对于输入:         {0,1,0,1,0}         {1,0,1,0,1}         {0,1,0,1,0}         {1,0,1,0,1}         {0,1,0,1,0}和K = 6,预期结果为12.这是我的代码,假设我们已经构建了Summed Area Table(satMatrix)

 count=0;

for(i=0; i<N; i++)                    //main loop
{
    for(j=0; j<N; j++)
    {           
        sumOfSubmatrix=satMatrix[i][j];
        if(sumOfSubmatrix==K) count++ ;

        for(int i1=0; i1<i; i1++)
        {
            sumOfSubmatrix=satMatrix[i][j]-satMatrix[i1][j];
            if(sumOfSubmatrix==K) count++ ;
        }

        for(int j1=0; j1<j; j1++)
        {
            sumOfSubmatrix=satMatrix[i][j]-satMatrix[i][j1];
            if(sumOfSubmatrix==K) count++ ;
        }

    }    

}

0 个答案:

没有答案