From 4e0e1deb49969ffb076114da8d72d6bd05615d36 Mon Sep 17 00:00:00 2001 From: Sayyed Nabeel Ahmad <94233521+sayyed-nabeel@users.noreply.github.com> Date: Thu, 22 Sep 2022 11:09:03 +0530 Subject: [PATCH 1/2] Huffman Coding using greedy algorithm. --- Huffman Coding/Output.png | Bin 0 -> 28860 bytes Huffman Coding/huffman.js | 113 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 Huffman Coding/Output.png create mode 100644 Huffman Coding/huffman.js diff --git a/Huffman Coding/Output.png b/Huffman Coding/Output.png new file mode 100644 index 0000000000000000000000000000000000000000..17812734bf6090f1ca62f824680e2f1b1ec90724 GIT binary patch literal 28860 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

`ZMOOs%abulv>0w{~<8 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"); + + return; + } + + // if we go to left then add "0" to the code. + // if we go to the right add"1" to the code. + + // recursive calls for left and + // right sub-tree of the generated tree. + printCode(root.left, s + "0"); + printCode(root.right, s + "1"); + } + +// main function +// number of characters. + let n = 6; + let charArray = [ 'a', 'b', 'c', 'd', 'e', 'f' ]; + let charfreq = [ 5, 9, 12, 13, 16, 45 ]; + + // creating a priority queue q. + // makes a min-priority queue(min-heap). + let q = []; + + for (let i = 0; i < n; i++) { + + // creating a Huffman node object + // and add it to the priority queue. + let hn = new HuffmanNode(); + + hn.c = charArray[i]; + hn.data = charfreq[i]; + + hn.left = null; + hn.right = null; + + // add functions adds + // the huffman node to the queue. + q.push(hn); + } + + // create a root node + let root = null; + q.sort(function(a,b){return a.data-b.data;}); + + // Here we will extract the two minimum value + // from the heap each time until + // its size reduces to 1, extract until + // all the nodes are extracted. + while (q.length > 1) { + + // first min extract. + let x = q[0]; + q.shift(); + + // second min extract. + let y = q[0]; + q.shift(); + + // new node f which is equal + let f = new HuffmanNode(); + + // to the sum of the frequency of the two nodes + // assigning values to the f node. + f.data = x.data + y.data; + f.c = '-'; + + // first extracted node as left child. + f.left = x; + + // second extracted node as the right child. + f.right = y; + + // marking the f node as the root node. + root = f; + + // add this node to the priority-queue. + q.push(f); + q.sort(function(a,b){return a.data-b.data;}); + } + + // print the codes by traversing the tree + printCode(root, ""); + +// This code is contributed by avanitrachhadiya2155 + From 18bb83381894e9e4f4ee9f279422e0d2a54ed912 Mon Sep 17 00:00:00 2001 From: Sayyed Nabeel Ahmad <94233521+sayyed-nabeel@users.noreply.github.com> Date: Thu, 22 Sep 2022 11:31:15 +0530 Subject: [PATCH 2/2] Create readme.md --- Huffman Coding/readme.md | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Huffman Coding/readme.md diff --git a/Huffman Coding/readme.md b/Huffman Coding/readme.md new file mode 100644 index 00000000..b4adc38c --- /dev/null +++ b/Huffman Coding/readme.md @@ -0,0 +1,62 @@ +Huffman coding is a lossless data compression algorithm. The idea is to assign variable-length codes to input characters, lengths of the assigned codes are based on the frequencies of corresponding characters. The most frequent character gets the smallest code and the least frequent character gets the largest code. +The variable-length codes assigned to input characters are Prefix Codes, means the codes (bit sequences) are assigned in such a way that the code assigned to one character is not the prefix of code assigned to any other character. This is how Huffman Coding makes sure that there is no ambiguity when decoding the generated bitstream. +Let us understand prefix codes with a counter example. Let there be four characters a, b, c and d, and their corresponding variable length codes be 00, 01, 0 and 1. This coding leads to ambiguity because code assigned to c is the prefix of codes assigned to a and b. If the compressed bit stream is 0001, the de-compressed output may be “cccd” or “ccb” or “acd” or “ab”. +See this for applications of Huffman Coding.
+There are mainly two major parts in Huffman Coding
+ +Build a Huffman Tree from input characters.
+Traverse the Huffman Tree and assign codes to characters.
+Steps to build Huffman Tree:-
+1- Input is an array of unique characters along with their frequency of occurrences and output is Huffman Tree.
+ +2- Create a leaf node for each unique character and build a min heap of all leaf nodes (Min Heap is used as a priority queue. The value of frequency field is used to compare two nodes in min heap. Initially, the least frequent character is at root) +Extract two nodes with the minimum frequency from the min heap.
+ +3-Create a new internal node with a frequency equal to the sum of the two nodes frequencies. Make the first extracted node as its left child and the other extracted node as its right child. Add this node to the min heap.
+ +4-Repeat steps#2 and #3 until the heap contains only one node. The remaining node is the root node and the tree is complete.
+ +For example:-
+ +1- Suppose the string below is to be sent over a network.
+ +![Screenshot 2022-09-22 at 11 18 10 AM](https://user-images.githubusercontent.com/94233521/191668309-6dad431e-b10a-4c33-b762-2db8cfd0f27e.png) + +2- Calculate the frequency of each character in the string.
+![Screenshot 2022-09-22 at 11 18 10 AM](https://user-images.githubusercontent.com/94233521/191668512-8ed929db-dd6e-4623-8c16-09dd3ff7343d.png) + +3- Sort the characters in increasing order of the frequency. These are stored in a priority queue
+![Screenshot 2022-09-22 at 11 18 21 AM](https://user-images.githubusercontent.com/94233521/191668603-d5a087c6-ceb7-4a27-9e80-88c602d0c879.png) + +4- Make each unique character as a leaf node.
+ +5- Create an empty node z. Assign the minimum frequency to the left child of z and assign the second minimum frequency to the right child of z. Set the value of the z as the sum of the above two minimum frequencies.
+![Screenshot 2022-09-22 at 11 18 28 AM](https://user-images.githubusercontent.com/94233521/191668999-e0d9ef52-493f-4a16-b9b5-8e892bebaafe.png) + +6- Remove these two minimum frequencies from Q and add the sum into the list of frequencies (* denote the internal nodes in the figure above).
+ +7-Insert node z into the tree.
+ +8-Repeat steps 3 to 5 for all the characters.
+![Screenshot 2022-09-22 at 11 18 37 AM](https://user-images.githubusercontent.com/94233521/191669278-521d3132-71cc-4a12-ad38-2783ab5766e7.png) + +![Screenshot 2022-09-22 at 11 18 45 AM](https://user-images.githubusercontent.com/94233521/191669386-3dda5baf-becb-488d-b587-3274c41cb301.png) + +9- For each non-leaf node, assign 0 to the left edge and 1 to the right edge.
+![Screenshot 2022-09-22 at 11 18 55 AM](https://user-images.githubusercontent.com/94233521/191669462-c66c15b4-43fa-4181-a0a5-e6474aa2c0de.png) + +10-For sending the above string over a network, we have to send the tree as well as the above compressed-code. The total size is given by the table below.
+ + +![Screenshot 2022-09-22 at 11 19 07 AM](https://user-images.githubusercontent.com/94233521/191669540-c912f863-f372-4797-9e87-dabfee3cec6c.png) + +Without encoding, the total size of the string was 120 bits. After encoding the size is reduced to 32 + 15 + 28 = 75.
+ + + + + + + + +