Advertisement
aniksajli

Huffman coding

Sep 17th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct MinHeapNode{
  5. char data;
  6. unsigned freq;
  7. MinHeapNode *left, *right;
  8.  
  9. MinHeapNode(char data, unsigned freq)
  10. {
  11. left = right = NULL;
  12. this->data = data;
  13. this->freq = freq;
  14. }
  15. };
  16.  
  17. struct compare{
  18.  
  19. bool operator()(MinHeapNode* l, MinHeapNode* r)
  20. {
  21. return (l->freq > r->freq);
  22. }
  23. };
  24.  
  25. void printCodes(struct MinHeapNode* root, string str)
  26. {
  27. if(!root)
  28. return;
  29.  
  30. if(root->data != '$')
  31. cout<<root->data<<": "<<str<<"\n";
  32.  
  33. printCodes(root->left, str+"0");
  34. printCodes(root->right, str+"1");
  35. }
  36.  
  37. void HuffmanCode(char data[], int freq[], int size)
  38. {
  39. struct MinHeapNode *left, *right, *top;
  40.  
  41. priority_queue<MinHeapNode*, vector<MinHeapNode*>, compare>minHeap;
  42.  
  43. for(int i = 0; i<size; ++i)
  44. {
  45. minHeap.push(new MinHeapNode(data[i],freq[i]));
  46. }
  47.  
  48. while(minHeap.size() != 1){
  49. left = minHeap.top();
  50. minHeap.pop();
  51.  
  52. right = minHeap.top();
  53. minHeap.pop();
  54.  
  55. top = new MinHeapNode('$',left->freq+right->freq);
  56.  
  57. top->left = left;
  58. top->right = right;
  59.  
  60. minHeap.push(top);
  61. }
  62. printCodes(minHeap.top(),"");
  63. }
  64.  
  65. int main()
  66. {
  67. char arr[] = {'a','b','c','d','e','f'};
  68. int freq[] = {5,9,12,13,16,45};
  69.  
  70. int size = sizeof(arr)/sizeof(arr[0]);
  71.  
  72. HuffmanCode(arr, freq, size);
  73.  
  74. return 0;
  75.  
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement