J'ai deux ensembles d'objets Animal
. La distance entre les animaux est définie en utilisant un algorithme spécifique qui regarde leurs traits. J'essaye de concevoir une méthode pour trouver la paire des deux ensembles (un de chaque) qui minimise la distance.Java: Question de conception - paires minimales entre les ensembles
Une idée que j'avais: créer une classe Tuple
paramétrée pour coupler Animals
. Créez un PriorityQueue
avec un comparateur pour trier Tuple<Animal>
en fonction de la distance entre les deux membres. Ensuite, choisissez la première paire du PriorityQueue
.
Est-ce une bonne conception, ou est-ce un gaspillage? Je crois qu'il fonctionnerait en O (m + n), où m et n sont les tailles de chaque collection.
Si Tuple
est une classe paramétrée, comment cela fonctionne-t-il pour utiliser un comparateur sur celui-ci qui ne fonctionne que sur Animal
? Je souhaite utiliser cette méthode findMinimalPair
pour créer un arbre couvrant minimisant les distances d'un graphique de Animal
objets. Que se passe-t-il si je fais cela en continuant à faire sauter les paires du PriorityQueue
, en vérifiant que chaque paire contient toujours un membre de chaque collection?
Voici un exemple de base. Voici les distances:
A0 A1 A2 A3
A0 0 20 33 8
A1 20 0 102 73
A2 33 102 0 6
A3 8 73 6 99
On suppose que les collections sont:
A0
A1, A2, A3
ici serait l'ordre de tri de tuples, par distance:
(A0, A3) - 8
(A0, A1) - 20
(A0, A2) - 33
Nous voyons donc que A3 est le plus proche. A3 est ensuite déplacé dans la première collection:
A0, A3
A1, A2
Encore une fois, nous vérifions pour une paire minimale:
(A3, A2) - 6
(A0, A1) - 20
(A0, A2) - 33
(A3, A1) - 73
maintenant A2 est prise. Regarde comment ça marche?
C'est ce que j'ai fini par faire. Commentaires?
ne vais pas vous devez créer un tuple de toutes les combinaisons des éléments dans l'ensemble A et l'ensemble B? Dans ce cas, vous aurez besoin de n! Tuples (en supposant n = m), et à partir de là, je ne sais pas ce que le PQ vous obtient. Peut-être que je suis un malentendu? Quelle est la taille de l'ensemble de données? Il semble que vous essayez d'installer un algorithme glouton quelconque. Quelles sont les spécifications exactes qui définissent la distance entre les animaux? Il pourrait y avoir un raccourci ici. –
Si c'est un de chaque ensemble alors c'est seulement n * m –
Pourriez-vous ajouter un exemple simple avec, disons, trois animaux dans chaque ensemble, et expliquer le résultat souhaité? D'après votre description, cela semble être un problème très simple, mais il se peut que quelque chose ne soit pas apparu dans votre message original. –