All aspects of modern society depend heavily on data collection and transmission. As society grows more dependent on data, the ability to store and transmit it efficiently has become more important than ever before. The Huffman coding theory has been one of the best coding methods for data compression without loss of information. It relies heavily on a technique called a greedy algorithm, a process that "greedily" tries to find an optimal solution global solution by solving for each optimal local choice for each step of a problem. Although there is a disadvantage that it fails to consider the problem as a whole, it is definitely useful in finding the benefits locally in multi-step problems. This paper explores the algorithm in general, both the advantages and disadvantages of Huffman coding, how the Huffman coding theory uses the greedy algorithm, and ways to improve those conditions with alternatives. From details to major components, this paper will introduce Huffman coding's application and complexity as well as its variations.