假设我有一个看起来像的二维数组:
________________
|10|15|14|20|30|
|14|10|73|71|55|
|73|30|42|84|74|
|14|74|XX|15|10|
----------------
正如我所示,列不需要相同的大小。
现在我需要找到每个列的最佳匹配(具有最完全相同的项和最低的不同的列)。当然,我可以在n ^ 2中做到这一点但对我来说太慢了。我该怎么做?
我想到了一个k维树,并找到了每个人的最近邻居,但我不知道它是否合适,它会按照我想要的方式工作(可能不会)。
结果例如:
依此类推......:)
答案 0 :(得分:0)
如果您知道表格中的所有数字都是2位数字(即10 =< x< 100),则每列创建一个布尔数组,您将在其中标记现有数字:
bool array[5][100];
std::fill( &array[0][0], &array[0][0] + sizeof(array) , false ); // init to false
for (int i = 0; i < 5; i++)
{
for (int j = 0; j <5; j++)
{
array[i][table[i][j]] = true;
}
}
从那里应该很容易。