Supposons que vous ayez une liste d'éléments, chacun avec un ensemble d'attributs.Générer des paires ayant les mêmes attributs de la liste
Qu'est-ce qu'un algorithme efficace pour générant toutes les paires de la liste ayant les mêmes attributs?
Par exemple, étant donné une liste:
[('item1', {'a','b'}), ('item2', {'a'}), ('item3', {'c','b'}), ('item4', {'b'})]
Nous devrions retourner la liste suivante de quatre paires, sur le total six possibles:
('item1', 'item2') # both have attribute 'a'
('item1', 'item3') # both have attribute 'b'
('item1', 'item4') # both have attribute 'b'
('item3', 'item4') # both have attribute 'b'
Maintenant, l'approche trivial serait d'abord générer la liste de toutes les paires n(n+1)/2
possibles, puis filtrer ceux sans attributs similaires, mais je soupçonne que cette approche est inefficace, surtout si le nombre de paires est très grand.
Des suggestions?
Toutes les exigences linguistiques de programmation? – trincot
@trincot - J'utilise actuellement python, mais c'est l'algorithme que je suis vraiment après. – nbubis
La première idée qui me vient à l'esprit est de construire un HashMap, possible dans O (numberOfAttributes). –
lwi