2011-11-04 4 views
1

Disons que j'ai un tableau 2D qui ressemble à:Comment trouver le meilleur correspondant pour toutes les colonnes d'un tableau 2D?

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

Comme je l'ai montré, les colonnes ne doivent pas nécessairement être la même taille.

Maintenant, j'ai besoin de trouver la meilleure correspondance pour chaque colonne (celle qui a le plus exactement les mêmes éléments et les plus différents). Bien sûr, je pourrais le faire en n^2 mais c'est trop lent pour moi. Comment puis-je le faire?

J'ai pensé à un arbre de dimension k et de trouver le voisin le plus proche pour chacun d'eux, mais je ne sais pas si c'est bon et ça marchera comme je veux (probablement pas).

Résultat par exemple:

  • La première colonne est le plus susceptible troisième (seulement trois différents - 10, 14, 42)
  • Deuxième colonne -> cinquième (seulement deux différents - 15 et 55)

et ainsi de suite et ainsi de suite ... :)

+0

Je ne comprends pas votre question. Votre exemple dit que la colonne 1 est la plus semblable, pourquoi? En outre, il n'y a pas 42 dans la colonne 1, et pas 55 dans la colonne 2. –

+0

Colonne un a des articles: 10, 14, 73, 14 Colonne trois a: 14, 73, 42 Maintenant, je ne recherche pas la plupart des éléments correspondants , je cherche les éléments les moins compatibles. Dans ce cas, nous avons 14 dans les deux (donc "supprimer" pour les comparer plus tard), 73 dans les deux (donc encore "supprimer") et nous avons laissé seulement 3 éléments qui sont seulement sur 1 côté. Si nous comparons la 1ère colonne avec d'autres, nous trouvons qu'il y a plus d'objets entre eux :) Aussi je pense qu'il peut être fait avec un arbre multi-dimensionnel et en comparant leur distance (avec du travail bien sûr) mais je ne suis pas " dans les arbres "tellement :) – RippeR

Répondre

0

Si vous savez que tous les chiffres du tableau sont des nombres à 2 chiffres (soit 10 = < x < 100), pour chaque colonne, créez un tableau de booléens où vous marquerez les nombres existants:

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

Devrait être facile à partir de là.

Questions connexes