Supposons que A est un tableau où A [0] contient la fréquence de la lettre 0 de l'alphabet. Quel est le moyen le plus efficace (*) pour calculer les longueurs de code? Pas sûr, mais je suppose que l'efficacité peut être en termes d'utilisation de la mémoire ou des mesures requises. Tout ce qui m'intéresse, c'est le tableau L
où L[0]
contient les longueurs de code (nombre de bits) de la lettre 0 de l'alphabet, où le code provient de l'arbre de Huffman canonique construit à partir d'un tableau de fréquences.Quelle est la manière la plus efficace (*) de construire un arbre canonnier huffman?
Répondre
Si les fréquences forment une séquence monotone, c.-à-d. A [0] < = A [1] < = ... < = A [n-1] ou A [0]> = A [1]> = ...> = A [n-1], alors vous peut générer une longueur de code optimale en temps O (n) et O (1) espace supplémentaire. Cet algorithme nécessite seulement 2 passes simples sur le tableau et c'est très rapide. Une description complète est donnée dans [1].
Si vos fréquences ne sont pas triées, vous devez d'abord les trier puis appliquer l'algorithme ci-dessus. Dans ce cas, la complexité temporelle est O (n log n) et un tableau auxiliaire de n entiers est nécessaire pour stocker la complexité de l'ordre ordonné trié O (n).
[1]: In-Place Calcul des codes minimum Redondance par Alistair Moffat et Jyrki Katajainen, disponible en ligne: http://www.diku.dk/~jyrki/Paper/WADS95.pdf
- 1. Construire un arbre de Huffman
- 2. Quelle est la manière la plus efficace de traverser un arbre en Python?
- 3. Construire un arbre de Huffman dans le régime
- 4. Quelle est la manière la plus simple de tracer un arbre de décomposition dans Mathematica?
- 5. Traverser un arbre Huffman
- 6. Quelle est la manière la plus efficace de lire un ifstream dans une chaîne?
- 7. Quelle est la manière la plus efficace de déplacer un UIImageView?
- 8. Quelle est la manière la plus pythonique?
- 9. Octave: quelle méthode est la plus efficace
- 10. Quelle technique est la plus efficace?
- 11. Quelle est la manière la plus efficace d'exécuter un INSERT selon qu'il existe déjà?
- 12. Quelle est la manière la plus efficace d'implémenter ReadLine() sur un flux binaire?
- 13. Quelle est la manière la plus efficace d'exécuter une fonction sur un lien Cliquez sur
- 14. Quelle est la manière la plus efficace d'effectuer des opérations logiques booléennes dans C# .NET?
- 15. Quelle sélection jQuery est la plus efficace?
- 16. Quelle est la manière la plus efficace d'implémenter la concurrence en Python?
- 17. Quelle est la manière la plus efficace de charger des données sur db?
- 18. Quelle est la manière la plus efficace de créer une liste distincte d'éléments utilisant .NET?
- 19. Quelle est la manière la plus efficace d'implémenter foldl1 de Haskell dans J?
- 20. Quelle est la manière la plus efficace de gérer des contrats à terme sur scala?
- 21. Revue de code: Est-ce la manière la plus efficace/élégante de marcher récursivement sur un arbre?
- 22. Quelle est la manière la plus efficace/élégante de supprimer des éléments d'une matrice dans MATLAB?
- 23. Quelle est la manière la plus élégante et la plus efficace de modéliser une hiérarchie d'objets de jeu? (Conception dérange)
- 24. Quelle est la manière la plus efficace d'obtenir le premier jour du mois en cours?
- 25. Quelle est la manière la plus efficace d'obtenir une «différence d'ensemble» Range dans Excel Automation?
- 26. arbre de Huffman mauvaise sortie
- 27. Quelle est la manière la plus efficace et la plus flexible de générer des combinaisons dans TSQL?
- 28. Quelle est la manière la plus efficace et la plus lisible de diviser une liste générique en fonction d'une condition?
- 29. Quelle est la manière la plus appropriée de programmer
- 30. Construire un arbre