将大块矩阵拆分成块

时间:2012-04-19 15:54:28

标签: c++ algorithm matrix

我有问题。我正在尝试在另一个矩阵(向量)中找到矩阵(向量)并且矩阵的大小为:

大规模矩阵:1024x768   小矩阵:36x49

基本上,我的理论是将大质量矩阵分割成小矩阵大小的块,这意味着我能够看到小矩阵是否存在于哪个块中然后输出块。然而,它只是不会平分,但我需要一种方法来确定小矩阵是否确实存在于大质量矩阵中。

例如,我将使用测试数据:

M1 = 
    0 1 0 0 
    1 1 1 1
    0 0 0 0
    1 0 1 1

M2 = 

    0 1
    1 1

然后我将矩阵分成2x2的块然后检查那样。这很简单,因为我只使用一个小矩阵并且矩阵可以被平分,而上面的问题要理解和弄清楚要复杂得多。

本质上,我需要能够将(1024x768)分割成块大小(36x49),然后我可以检查以确定特定矩阵的位置。我一直在使用这个算法:

// Assume: 
// matrix1ColSize = 768
// matrix2ColSize = 49
const int ROW_BOUNDS = matrix1.size() - matrix2.size();
const int COL_BOUNDS = matrix1ColSize - matrix2ColSize;

bool found = false;

for(int i=0; (i < ROW_BOUNDS); i++)
{
    bool matchFound = false;

    for(int j=0; (j < COL_BOUNDS); j++) {
        // logic here
    }
    cout << endl;
}

有人可以提供任何建议吗?这真让我烦恼:(!

1 个答案:

答案 0 :(得分:0)

如果两个矩阵的所有元素相同,则它们是相同的。因此,下面的伪代码将小矩阵与大矩阵中的块进行比较:

Initialize result to "true"
For each position in the small matrix
    Read the value from the large matrix; call it x1
    Read the value from the small matrix; call it x2
    If x1 is not equal to x2, set result to "false"
    (Optional) If x1 is not equal to x2, stop looking at other positions
Here, use the result

这个逻辑将在你的2个嵌套循环中,所以你将有4个嵌套循环!如果您害怕混淆,请将实现放在函数中。如果你想使用4个嵌套循环,祝你好运。

在c ++中:

bool is_equal = true;
for (int y = 0; y < 49; ++y)
{
    for (int x = 0; x < 36; ++x)
    {
        if (matrix1.at(j + x, i + y) != matrix2.at(x, y))
        {
            is_equal = false;
            goto DONE; // optional
        }
    }
}
DONE:;

编辑:此代码假定使用矩阵的自定义类;再看一下你的代码之后,我意识到你可能使用向量向量(std::vector<std::vector<int>>),所以使用matrix2[y][x]而不是matrix2.at(x, y)