# Introduction

Huffman code is a type of prefix-free code that is used for data compression purposes. This coding algorithm was introduced by David A. Huffman in 1952. Huffman coding is a widely used algorithm for data compression in various applications like image and text compression, file archiving, and cryptography.

The purpose of Huffman code is to reduce the number of bits used to represent a symbol by assigning shorter codes to frequently occurring symbols and longer codes to infrequent symbols.

## What is Huffman Code?

Huffman Code is a lossless data compression technique that assigns unique binary codes to each character in a given data set based on their frequency of occurrence. Characters that occur more frequently in the data set are assigned shorter codes, while characters that occur less frequently are assigned longer codes. This variable-length coding technique ensures that the most commonly occurring characters are encoded with fewer bits, resulting in a smaller overall file size.

For example, in a given data set that contains the characters “a”, “b”, “c”, “d”, and “e”, with “a” occurring the most frequently and “e” occurring the least frequently, Huffman Code would assign shorter codes to “a” and longer codes to “e”.

## The Greedy Algorithm for Constructing Huffman Code

The Greedy Algorithm is a method used to construct Huffman Code. It is called “greedy” because it makes the locally optimal choice at each step, with the hope of finding a global optimum. The steps in the Greedy Algorithm for constructing Huffman Code are:

- Compute the frequency of each character in the data set.
- Create a binary tree with each character in the data set as a leaf node and their frequencies as weights.
- While there is more than one node in the tree: a. Select the two nodes with the lowest weights. b. Create a new internal node with the sum of the weights of the selected nodes. c. Make the selected nodes children of the new node. d. Add the new node to the tree.
- The root of the tree is the encoding for the entire data set.

For example, given the data set “ABBCCCDDDDEEEEE”, the Greedy Algorithm would produce the following tree:

` code````
+
/ \
/ \
/ \
+ E
/ \
/ \
/ \
D +
/ \
/ \
C B
```

The resulting Huffman Code for this data set would be:

Character | Code |
---|---|

A | 00 |

B | 11 |

C | 01 |

D | 10 |

E | 10 |

## Advantages of Huffman Code

Huffman Code offers several benefits compared to other encoding techniques. Some of the advantages are:

- Reduced file size: Huffman Code compresses data more efficiently than other techniques, resulting in a smaller file size.
- Fast encoding and decoding: The Greedy Algorithm used to construct Huffman Code is relatively simple and fast.
- Lossless compression: Unlike lossy compression techniques, Huffman Code does not discard any data during the compression process, resulting in no loss of quality.

## Disadvantages of Huffman Code

Although Huffman Code has several advantages, there are also some limitations to the technique. Some of the disadvantages are:

- Increased complexity for large data sets: As the size of the data set increases, the number of possible binary codes increases exponentially, making the encoding and decoding process more complex.
- Huffman Code may not always produce the most optimal compression: In some cases, other encoding techniques may produce better compression results than Huffman Code.

## Applications of Huffman Code

Huffman Code is used in a wide range of applications, including:

- File compression: Huffman Code is used in popular file compression formats like ZIP, GZIP, and JPEG.
- Network communication: Huffman Code is used to compress data transmitted over networks, reducing network traffic and improving data transfer speeds.
- Error correction: Huffman Code is used in error correction codes to detect and correct errors in transmitted data.

## Improvements to Huffman Code

In recent years, there have been several developments in improving Huffman Code’s performance and efficiency. Some of the developments are:

- Adaptive Huffman Coding: This technique allows the algorithm to update the tree structure during the encoding process, improving its efficiency.
- Parallel Huffman Coding: This technique distributes the encoding process across multiple processors, reducing the encoding time for large data sets.

## DAA-2022

## Q-1.

(b) Discuss the concept of asymptotic notation and its properties.

## Q-2.

## Q-3

## Q-4

What is Huffman code ? discuss the greedy algorithm for constructing the Huffman code.

## Q-5

## Q-6

## Q-7

What is bitonic sequence ? discuss bitonic sort algorithm and it’s time complexity.

## Q-8

What is sorting Network ? Discuss the structure of bubble sorting network.