Advertisement
Guest User

Untitled

a guest
Jul 12th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. /*
  2. * Huffman.h
  3. *
  4. *
  5. */
  6.  
  7. #ifndef HUFFMAN_H_
  8. #define HUFFMAN_H_
  9. #include <iterator> // std::forward_iterator_tag
  10. #include <cstddef> // std::ptrdiff_t
  11.  
  12. template<typename T, typename E>
  13.  
  14. class Huffman {
  15. public:
  16. typename T::iterator beginSeq; ///< iteratore che punta al primo elemento della sequenza T
  17. typename T::iterator endSeq; ///< iteratore che punta all'ultimo elemento della sequenza T
  18. E elementi[]; ///< sequenza di elementi ordinata per frequenza
  19. int frequenza[]; ///< frequenza di ogni singolo elemento
  20. int dimSeq; ///< dimensione della sequenza T
  21. int dimHuffman; ///< dimensione della sequenza T senza ripetizioni
  22.  
  23. private:
  24. void calcolafrequenza() {
  25. int i = 0, j = 0;
  26. while(beginSeq != endSeq) {
  27. j = i - 1;
  28. while(j >= 0) {
  29. if (*beginSeq == elementi[j]) {
  30. frequenza[j]++;
  31. j = -2;
  32. }else j--;
  33. }
  34. if (j == -1) {
  35. elementi[i] = *beginSeq;
  36. frequenza[i] = 1;
  37. i++;
  38. }
  39. dimSeq++;
  40. beginSeq++;
  41. }
  42. dimHuffman = i;
  43. E temp;
  44. int freqtemp;
  45. for(int k = 0; k < dimHuffman; k++) {
  46. for(int t = k; t < dimHuffman; t++) {
  47. if (frequenza[t] > frequenza[k]) {
  48. temp = elementi[k];
  49. freqtemp = frequenza[k];
  50. elementi[k] = elementi[t];
  51. frequenza[k] = frequenza[t];
  52. elementi[t] = temp;
  53. frequenza[t] = freqtemp;
  54. }
  55. }
  56. }
  57. }
  58.  
  59.  
  60. public:
  61. /**
  62. * Costruttore di default
  63. */
  64. Huffman() {
  65. beginSeq = 0;
  66. endSeq = 0;
  67. dimSeq = 0;
  68. dimHuffman = 0;
  69. }
  70.  
  71. /**
  72. * Costruttore secondario
  73. * @param beginSeq iteratore che punta al primo elemento della sequenza
  74. * @param endSeq iteratore che punta all'ultimo elemento della sequenza
  75. */
  76. Huffman(typename T::iterator beginSeq, typename T::iterator endSeq) {
  77. this->beginSeq = beginSeq;
  78. this->endSeq = endSeq;
  79. dimSeq = 0;
  80. dimHuffman = 0;
  81. calcolafrequenza();
  82. }
  83.  
  84. };
  85.  
  86.  
  87. #endif /* HUFFMAN_H_ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement