如何找到2D阵列的所有列的最佳匹配?

时间:2011-11-04 16:22:53

标签: c++ arrays tree matching similarity

假设我有一个看起来像的二维数组:

________________
|10|15|14|20|30|
|14|10|73|71|55|
|73|30|42|84|74|
|14|74|XX|15|10|
----------------

正如我所示,列不需要相同的大小。

现在我需要找到每个列的最佳匹配(具有最完全相同的项和最低的不同的列)。当然,我可以在n ^ 2中做到这一点但对我来说太慢了。我该怎么做?

我想到了一个k维树,并找到了每个人的最近邻居,但我不知道它是否合适,它会按照我想要的方式工作(可能不会)。

结果例如:

  • 第一列很可能是第三列(只有三个不同--10,14,42)
  • 第二栏 - >第五(只有两个不同 - 15和55)

依此类推......:)

1 个答案:

答案 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;
  }
}

从那里应该很容易。