Do you know, during Huffman data compression, greedy algorithm is utilized to build a Huffman tree that compresses a given image, spreadsheet, or video into a lossless compressed file? Also, this greedy coding paradigm encapsulates algorithmic problems where selecting the most obvious answer for the current subproblem leads to the solution of a more complex problem. So, in this article, we will discover a greedy algorithmic paradigm in detail.

#### Post Graduate Program: Full Stack Web Development

in Collaboration with Caltech CTME ## What Is Greedy Algorithm?

A Greedy algorithm is an approach to solving a problem that selects the most appropriate option based on the current situation. This algorithm ignores the fact that the current best result may not bring about the overall optimal result. Even if the initial decision was incorrect, the algorithm never reverses it.

This simple, intuitive algorithm can be applied to solve any optimization problem which requires the maximum or minimum optimum result. The best thing about this algorithm is that it is easy to understand and implement.

The runtime complexity associated with a greedy solution is pretty reasonable. However, you can implement a greedy solution only if the problem statement follows two properties mentioned below:

• Greedy Choice Property: Choosing the best option at each phase can lead to a global (overall) optimal solution.
• Optimal Substructure: If an optimal solution to the complete problem contains the optimal solutions to the subproblems, the problem has an optimal substructure.

Moving forward, we will learn how to create a greedy solution for a problem that adheres to the principles listed above.

## Steps for Creating a Greedy Algorithm

By following the steps given below, you will be able to formulate a greedy solution for the given problem statement:

• Step 1: In a given problem, find the best substructure or subproblem.
• Step 2: Determine what the solution will include (e.g., largest sum, shortest path).
• Step 3: Create an iterative process for going over all subproblems and creating an optimum solution.

#### New Course: Full Stack Development for Beginners

Learn Git Command, Angular, NodeJS, Maven & More Let’s take up a real-world problem and formulate a greedy solution for it.

Problem: Alex is a very busy person. He has set aside time T to accomplish some interesting tasks. He wants to do as many tasks as possible in this allotted time T. For that, he has created an array A of timestamps to complete a list of items on his itinerary.

Now, here we need to figure out how many things Alex can complete in the T time he has.

Approach to Build a Solution: This given problem is a straightforward greedy problem. In each iteration, we will have to pick the items from array A that will take the least amount of time to accomplish a task while keeping two variables in mind: current_Time and number_Of_Things. To generate a solution, we will have to carry out the following steps.

• Sort the array A in ascending order.
• Select one timestamp at a time.
• After picking up the timestamp, add the timestamp value to current_Time.
• Increase number_Of_Things by one.
• Repeat steps 2 to 4 until the current_Time value reaches T.

## Example of Greedy Algorithm

Problem Statement:  Find the best route to reach the destination city from the given starting point using a greedy method. Greedy Solution: In order to tackle this problem, we need to maintain a graph structure. And for that graph structure, we'll have to create a tree structure, which will serve as the answer to this problem. The steps to generate this solution are given below:

• Start from the source vertex.
• Pick one vertex at a time with a minimum edge weight (distance) from the source vertex.
• Add the selected vertex to a tree structure if the connecting edge does not form a cycle.
• Keep adding adjacent fringe vertices to the tree until you reach the destination vertex.

The animation given below explains how paths will be picked up in order to reach the destination city. #### Full Stack Web Developer Course

To become an expert in MEAN Stack ## Limitations of Greedy Algorithm

Factors listed below are the limitations of a greedy algorithm:

1. The greedy algorithm makes judgments based on the information at each iteration without considering the broader problem; hence it does not produce the best answer for every problem.
2. The problematic part for a greedy algorithm is analyzing its accuracy. Even with the proper solution, it is difficult to demonstrate why it is accurate.
3. Optimization problems (Dijkstra’s Algorithm) with negative graph edges cannot be solved using a greedy algorithm.

Moving forward, let’s look at some applications of a greedy algorithm.

## Applications of Greedy Algorithm

Following are few applications of the greedy algorithm:

• Used for Constructing Minimum Spanning Trees: Prim’s and Kruskal’s Algorithms used to construct minimum spanning trees are greedy algorithms.
• Used to Implement Huffman Encoding: A greedy algorithm is utilized to build a Huffman tree that compresses a given image, spreadsheet, or video into a lossless compressed file.
• Used to Solve Optimization Problems: Graph - Map Coloring, Graph - Vertex Cover, Knapsack Problem, Job Scheduling Problem, and activity selection problem are classic optimization problems solved using a greedy algorithmic paradigm.
Advance your career as a MEAN stack developer with the Full Stack Web Developer - MEAN Stack Master's Program. Enroll now!

## Conclusion

In this greedy algorithm article, you learned what a greedy programming paradigm is and discovered properties and steps to build a greedy solution. The article also discusses applications and mentions the limitations of greedy algorithm. You also saw an example of this algorithm which will help grasp the concept.  If you want a quick and easy way to understand the greedy algorithmic paradigm, we advise you to watch this video: https://youtu.be/ilYwrsP7zzk.

Every day, new products, tools, and apps are being introduced and launched into the market. And there are hundreds of programming languages and frameworks being utilized every day in the realm of software development. Hence, it is crucial for you to go beyond data structure concepts and cover the foundations of interactive application development. Simplilearn's Software Development Courses provide the right platform for you to master the art of software development. The courses in this catalog can help you improve your odds of becoming a software developer. So, go ahead and start exploring! Simplilearn