Quel est le moyen le plus rapide de comparer deux tableaux pour l'égalité?
J'ai deux tableaux d'objets qui sont susceptibles d'avoir les mêmes valeurs, mais dans un ordre différent, par exemple
{ "cat", "dog", "mouse", "pangolin" }
{ "dog", "pangolin", "cat", "mouse" }
Je souhaite traiter ces deux tableaux que l'égalité. Quel est le moyen le plus rapide pour tester cela?
source d'informationauteur izb
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas garantir que c'est la plus rapidemais c'est certainement très efficace:
EDIT:
SaeedAlg et Sandris soulever des points valables sur les différentes fréquences de doublons, provoquant des problèmes avec cette approche. Je vois deux solutions de contournement si c'est important (n'ont pas donné beaucoup de pensée à leur efficacité):
1.Trier les tableaux et les comparer de manière séquentielle. Cette approche, en théorie, devrait avoir quadratique de la complexité dans le pire des cas.
E. g.:
2.Construire une fréquence de tableau de chaînes de caractères dans chaque tableau et de les comparer. E. g.:
Je pense que la seule façon raisonnable est de les trier puis de les comparer.
De tri nécessite
O(n logn)
et en comparantO(n)
donc c'est toujours un total deO(n logn)
Avez-vous essayé quelque chose comme
Convertir les deux tableaux à HashSets et l'utilisation setequals
Je voudrais utiliser un HashSet, s'il n'y a pas de doublons
Edit:
Si vous avez des quatre éléments, il pourrait être plus rapide pour sauter le HashSet et l'utilisation arr1.Contient dans la comparaison. Mesure et de choisir la manière la plus rapide pour votre taille de la matrice.
Pseudocode :