2011-11-04 78 views
1

比方说,我有一个二维数组,看起来像:如何找到二维数组所有列的最佳匹配?

________________ 
|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)

等等等等... :)

+0

我不明白你的问题。你的例子说第1列是最相似的,为什么?此外,列1中没有42,列2中没有55. –

+0

第一列有项目:10,14,73,14 第三列有:14,73,42 现在我不寻求大多数匹配元素,我寻求至少不匹配的元素。在这种情况下,我们在这两种情况下都有14个(所以“删除”它们用于稍后的比较),两个都是73(所以再次“删除”),我们只剩下3个只在一侧的项目。如果我们比较第一列与其他人,我们发现他们之间还有更多的项目:) 另外我可以用多维树来完成比较他们的距离(当然有一些工作),但我不是“在树上“这么多:) – RippeR

回答

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

应该很容易。

相关问题