J'ai un tableau de hachage arbitraire, avec un élément du hachage un entier (appelez-le 'id'). Je veux trier ces hachages dans un nombre de compartiments (constant sur le tableau), où chaque segment est une plage arbitraire de 'ids' (par exemple 1-10, 15-20, 20-30). Quelle est la meilleure stratégie de tri pour cela? Est-il possible de se passer d'une boucle imbriquée?Quel est le moyen le plus efficace de trier une collection d'articles dans des seaux?
Répondre
Si le nombre de compartiments est petit, vous êtes probablement mieux avec les boucles imbriquées. La boucle extérieure sur les hachages, et l'intérieur sur les seaux. O(n*m)
.
Si le nombre de hash, et le nombre de seaux sont grandes, vous pouvez:
hashes = sort(hashes)
buckets = sort(buckets) # sort by lower-bound of bucket
i = 0
foreach (hash in hashes) {
while (buckets[i].lower_bound > hash) {
i = i + 1
}
bucket[i].add(hash)
}
Les boucles essentiellement à travers les hash en les ajoutant au seau en cours et avancer au prochain seau au besoin. O (n * log (n) + m * log (m))
Si les hachages sont de bonne qualité, ils présenteront une distribution uniforme, de sorte que vous pouvez utiliser des godets répartis uniformément pour répartir la collection en un seul passage. .
Si vous souhaitez également que les hachages soient triés dans les compartiments, utilisez un algorithme de tri normal une fois que tout est dans des compartiments. Ce serait une utilisation inhabituelle des hachages, cependant. (Si vous n'essayez pas de trier dans des compartiments, le mot «trier» est un terme impropre.) Ce que vous vouliez vraiment, c'était le partitionnement.)
Vous ne parlez pas de langue/plate-forme, mais pour des raisons d'efficacité. touches (C#):
var histogram = new[] { 0, 10, 15, 20, 30, 40 };
var values = new[] { 12, 14, 5, 6, 7, 1, 34, 26, 17 };
var bars = values.GroupBy(v => histogram.First(b => v < b));
- 1. Quel est le moyen le plus efficace de trier les emails avec zend_mail?
- 2. quel est le moyen le plus efficace d'écraser bitmapdata
- 3. Quel est le moyen le plus efficace de gérer un grand nombre de lignes dans OpenGL?
- 4. Quel est le moyen le plus efficace d'écrire une requête pour obtenir le dernier élément de la collection?
- 5. Quel est le moyen le plus efficace de faire des tableaux d'octets immuables dans Scala?
- 6. Quel est le moyen le plus efficace pour charger les données d'un fichier dans une collection à la demande?
- 7. Quel est le moyen le plus efficace d'identifier et de remplacer un objet dans une ObservableCollection?
- 8. Quel est le moyen le plus efficace de faire une recherche fulltext pondérée dans MYSQL?
- 9. Quel est le sélecteur le plus correct/le plus efficace?
- 10. Quel est le moyen le plus efficace de créer une conversation vidéo sur le Web?
- 11. Quel est le moyen le plus efficace de récupérer des objets de relations plusieurs-à-plusieurs?
- 12. Quel est le moyen le plus efficace pour stocker et analyser des données dans AS3?
- 13. Quel est le moyen le plus efficace d'obtenir des données d'un modèle dans CakePHP?
- 14. Quel est le moyen le plus efficace de stocker des balises d'analyse?
- 15. Quel est le moyen le plus efficace de faire des requêtes XPath récursives en utilisant libxml2?
- 16. Quel est le moyen le plus efficace d'obtenir le premier élément d'un tableau associatif en JavaScript?
- 17. Quel est le moyen le plus efficace de travailler avec des distances entre deux coordonnées?
- 18. Quel est le moyen le plus léger et le plus efficace d'intégrer des images dans le courrier php?
- 19. Quel est le moyen le plus efficace de gérer une session expirée avec ASP.NET 2.0
- 20. rails: quel est le moyen le plus efficace de stocker des sessions?
- 21. Quel est le moyen le plus performant de vérifier l'existence avec une collection d'entiers?
- 22. Quel code jQuery est le plus efficace?
- 23. Quel est le moyen le plus efficace de tronquer un nombre pour une précision spécifique?
- 24. Le moyen le plus efficace pour trier deux vecteurs dans lockstep dans R?
- 25. Quel est le moyen le plus efficace d'accéder à d'autres contrôles de formulaires dans .NET?
- 26. Quel est le moyen le plus efficace pour restaurer plusieurs bases de données dans SQL 2008
- 27. Quel est le moyen le plus efficace de migrer ces données dans Sql Server?
- 28. Quel est le moyen le plus efficace de combiner plusieurs fichiers flash dans un seul film?
- 29. Quel est le moyen le plus efficace de lire un fichier journal dans Java?
- 30. Quel est le moyen le plus efficace de copier un tableau d'entiers dans l'objectif C?