J'écris un programme qui fera une compression de base en utilisant une table de recherche. Pour créer la table, je vais lire dans un fichier texte (taille 2MB), puis trouver les 255 mots les plus communs et les stocker dans un autre fichier texte. J'essaie d'utiliser un vecteur maintenant, mais l'exécution est lente à environ une minute d'exécution pour l'insérer dans le vecteur, le trier, puis afficher les 255 premiers éléments dans un autre fichier texte. L'insertion semble être problématique car je dois vérifier si elle existe déjà à l'intérieur du vecteur puis incrémenter un compteur s'il existe, ou ajouter l'élément à la fin du vecteur si ce n'est pas le cas. J'ai besoin de trouver un moyen efficace d'insérer des éléments dans une structure de données seulement quand ils ne sont pas déjà dans la structure de données (pas de doublons).Quelle structure de données est la plus rapide pour l'insertion et la recherche d'éléments?
Répondre
std::unordered_map
est susceptible être le mieux à vos besoins, aucune garantie. Vous pouvez "ajouter une clé si et seulement si elle n'est pas déjà présente" simplement en utilisant operator[]
.
Vous ferez un passage sur la division de 2 Mo en mots et en comptant les fréquences (une recherche dans la structure par mot). Ensuite, utilisez std::partial_sort_copy
(la version qui prend un comparateur) pour obtenir le top 255 par le nombre de fréquence à partir du unordered_map
. Vous devez partial_sort_copy
dans un vecteur ou un tableau, puis l'utiliser pour écrire le fichier.
Pour 2 Mo de données, tout ce qui est en quelques secondes est certainement plus lent qu'il ne devrait "l'être", et quelques secondes sont encore plus lentes que possible. Vous avez donc raison de vous préoccuper de votre vecteur, mais vous devez également définir votre code pour vous assurer qu'il s'agit vraiment du vecteur qui vous a coûté le temps, et non d'un autre problème.
Essayez d'utiliser STL map
ou set
il est beaucoup plus rapide que vecteur: voir here
Le code devrait utiliser une «carte» car les fréquences doivent également être stockées. En outre, "beaucoup plus rapide" doit être qualifié car ce sont des structures de données fondamentalement différentes. – user2864740
- 1. Structure de données .net la plus rapide pour la recherche parallèle
- 2. quelle est la grille de données winforms la plus rapide?
- 3. Quelle est la recherche de chaîne plus rapide ou la recherche regex?
- 4. La structure MYSQL la plus rapide pour ce qui suit?
- 5. Quelle est l'application TAR la plus rapide?
- 6. Quelle ligne MySql est la plus rapide:
- 7. Base de données de recherche et de mémoire la plus rapide pour un projet Python
- 8. Quelle est la structure de données la plus efficace pour contenir des mots-clés?
- 9. Meilleure structure de données pour la recherche?
- 10. Quelle structure de données serait la meilleure pour cela?
- 11. En Java, quelle est la classe la plus recommandée pour une structure de données de dictionnaire?
- 12. Quelle est la base de données NoSQL la plus rapide répondant à ces exigences?
- 13. Quelle est la structure de données parfaite pour la correspondance exacte de modèle de chaîne?
- 14. Quelle infrastructure de données utiliser pour une recherche rapide du plus proche voisin?
- 15. Optimisation de requête: Quelle syntaxe SELECT est la plus rapide?
- 16. La structure de données la plus rapide pour contains() en Java?
- 17. La structure de données la plus rapide pour un grand index dans groovy?
- 18. Quelle est la collection générique la plus rapide?
- 19. structure de données comme la file d'attente avec recherche rapide et insertion
- 20. Quelle est la fonction la plus rapide? substr() ou str_replace()?
- 21. SQL - recherche d'intervalle la plus rapide
- 22. Quelle est la bibliothèque XML la plus utilisée pour C++?
- 23. Quelle est la fonction la plus rapide et la plus efficace?
- 24. Quelle méthode DataContext sera la plus rapide?
- 25. Structure de données plus rapide pour rechercher une chaîne
- 26. Comment rendre la recherche automatique plus rapide?
- 27. moyen le plus rapide pour construire la structure hiérarchique
- 28. structure de données la plus rapide pour l'information de récupération C++
- 29. Quelle méthode d'assemblage d'entités est la plus rapide?
- 30. Plus rapide que la recherche binaire pour la liste ordonnée
Voir http://stackoverflow.com/questions/4687392/counting-frequency-of-integers-take-together, http://stackoverflow.com/questions/8322031/extending-a-program-to-count- line-frequency? rq = 1 pour la "solution" générale à ce problème de comptage des fréquences. – user2864740