From 53a557ba3cb51e37b4257033f6ef34fbd20e926d Mon Sep 17 00:00:00 2001 From: Ayushi C <67193440+AyushiChakrabarty@users.noreply.github.com> Date: Wed, 4 Nov 2020 11:27:47 +0530 Subject: [PATCH] Create Huffman Coding --- Huffman Coding | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Huffman Coding diff --git a/Huffman Coding b/Huffman Coding new file mode 100644 index 0000000..27bf389 --- /dev/null +++ b/Huffman Coding @@ -0,0 +1,70 @@ +#include +#include +using namespace std; + +struct MinHeapNode +{ + char number; + unsigned freq; + MinHeapNode *left, *right; + MinHeapNode(char number, unsigned freq) + { + left = right = NULL; + this->number = number; + this->freq = freq; + } +}; +struct compare { + bool operator()(MinHeapNode* l, MinHeapNode* r) + { + return (l->freq > r->freq); + } +}; +void printCodes(struct MinHeapNode* root, string code) +{ + + if (!root) + return; + + if (root->number != '$') + cout << root->number<< ": "<left,code+"0"); + printCodes(root->right,code+"1"); +} +void Huffman(char number[], int freq[], int size) +{ + struct MinHeapNode *left, *right, *top; + priority_queue, compare> minHeap; + + for (int i = 0; i < size; ++i) + minHeap.push(new MinHeapNode(number[i], freq[i])); + while (minHeap.size() != 1) + { + left = minHeap.top(); + minHeap.pop(); + + right = minHeap.top(); + minHeap.pop(); + top = new MinHeapNode('$', left->freq + right->freq); + + top->left = left; + top->right = right; + + minHeap.push(top); + } + printCodes(minHeap.top(), ""); +} + +int main() +{ + + char img[] = {'0','1','2','3','4','5','6','7'}; + int freq[] = {1,4,2,3,2,12,10,2}; + + int size = sizeof(img) / sizeof(img[0]); + + Huffman(img, freq, size); + + return 0; +}