Skip to content

Commit 8148276

Browse files
Update README.md
1 parent 7f16149 commit 8148276

File tree

1 file changed

+221
-23
lines changed

1 file changed

+221
-23
lines changed

README.md

Lines changed: 221 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,221 @@
1-
<div data-v-5e9078c0="" data-v-b06dc010="" class="QuestionsList"><div data-v-5e9078c0=""><h1 data-v-5e9078c0="">
2-
Top 7 Greedy Algorithms interview
3-
questions and answers in 2021.
4-

5-
You can check all
6-
7
7-
Greedy Algorithms interview questions here 👉
8-
https://devinterview.io/data/greedyAlgorithms-interview-questions
9-


🔹 1. What is a Greedy Algorithm?

Answer:

We call algorithms greedy when they utilise the greedy property. The greedy property is:

At that exact moment in time, what is the optimal choice to make?

Greedy algorithms are greedy. They do not look into the future to decide the global optimal solution. They are only concerned with the optimal solution locally. This means that the overall optimal solution may differ from the solution the greedy algorithm chooses.

They never look backwards at what they've done to see if they could optimise globally. This is the main difference between Greedy Algorithms and Dynamic Programming.

Source: skerritt.blog   


🔹 2. What Are Greedy Algorithms Used For?

Answer:

Greedy algorithms are quick. A lot faster than the two other alternatives (Divide & Conquer, and Dynamic Programming). They're used because they're fast. Sometimes, Greedy algorithms give the global optimal solution every time. Some of these algorithms are:

  • Dijkstra's Algorithm
  • Kruskal's algorithm
  • Prim's algorithm
  • Huffman trees

These algorithms are Greedy, and their Greedy solution gives the optimal solution.

Source: skerritt.blog   


🔹 3. What is the difference between Dynamic Programming and Greedy Algorithms?

10-
👉🏼 Check
11-

🔹 4. What's the difference between Greedy and Heuristic algorithm?

12-
👉🏼 Check
13-

🔹 5. Compare Greedy vs Divide & Conquer vs Dynamic Programming Algorithms

14-
👉🏼 Check
15-

🔹 6. Is Dijkstra's algorithm a Greedy or Dynamic Programming algorithm?

16-
👉🏼 Check
17-

🔹 7. Are there any proof to decide if Greedy approach will produce the best solution?

18-
👉🏼 Check
19-


20-
Thanks 🙌 for reading and good luck on your next tech interview!
21-

22-
Explore 3800+ dev interview question here 👉
23-
1+
# ⚫ Greedy Algorithms in Tech Interviews 2024: 6 Must-Know Questions & Answers
2+
3+
**Greedy Algorithms** make locally optimal choices at each step in the hope of finding a global optimum. They're effective for certain problems where this **local-to-global strategy** works, such as the coin change or activity selection problems. In coding interviews, they assess a candidate's ability to identify when a problem can be solved with a **greedy approach** and to implement efficient solutions.
4+
5+
Check out our carefully selected list of **basic** and **advanced** Greedy Algorithms questions and answers to be well-prepared for your tech interviews in 2024.
6+
7+
![Greedy Algorithms Decorative Image](https://storage.googleapis.com/dev-stack-app.appspot.com/blogImg/greedyAlgorithms.png?GoogleAccessId=firebase-adminsdk-bgeaf%40dev-stack-app.iam.gserviceaccount.com&Expires=1698605801&Signature=dNR6CR%2FdvQh7ATJ8H3pR%2FoVYrlCbgkyQ90Cim0EygB7Mezi0OQTicsYE6suxVxLVS8Eu8SEQEnEjPQbRKTz%2Fr4uSm0flYBw5SL8OI%2BwPup5Ui9s0G%2BbOzoAJXAr6W%2FcT6%2FtwsNBCd2eFgg0iVDnnPhhd7RJH0%2BRJSptpA8AflV47eO2LIJKsYQYIKW8cvj3LOSAefvOP2tzFI%2Bt59QQHTQljlLaF1ge92BYABFIg0F6gzeHlMfqfRtsx%2Bc6wmsjX6su7pQgYlh%2FbSUZeVvV%2FdtPIhfslJJ04L9K65kz4RYu7cylvUY9e6rn6QB3%2B8lXtfAvgJR1BS7xGlwp8mbtGrg%3D%3D)
8+
9+
👉🏼 You can also find all answers here: [Devinterview.io - Greedy Algorithms](https://devinterview.io/data/greedyAlgorithms-interview-questions)
10+
11+
---
12+
13+
## 🔹 1. What is a _Greedy Algorithm_?
14+
15+
### Answer
16+
17+
A **greedy algorithm** aims to solve optimization problems by making the **best local choice** at each step. While this often leads to an **optimal global solution**, it's not guaranteed in all cases. These algorithms are generally easier to implement and faster than other methods like Dynamic Programming but may not always yield the most accurate solution.
18+
19+
### Key Features
20+
1. **Greedy-Choice Property**: Each step aims for a local optimum with the expectation that this will lead to a global optimum.
21+
2. **Irreversibility**: Once made, choices are not revisited.
22+
3. **Efficiency**: Greedy algorithms are usually faster, particularly for problems that don't require a globally optimal solution.
23+
24+
### Example Algorithms
25+
26+
#### Fractional Knapsack Problem
27+
Here, the goal is to maximize the value of items in a knapsack with a fixed capacity. The greedy strategy chooses items based on their **value-to-weight ratio**.
28+
29+
```python
30+
def fractional_knapsack(items, capacity):
31+
items.sort(key=lambda x: x[1]/x[0], reverse=True)
32+
max_value = 0
33+
knapsack = []
34+
for item in items:
35+
if item[0] <= capacity:
36+
knapsack.append(item)
37+
capacity -= item[0]
38+
max_value += item[1]
39+
else:
40+
fraction = capacity / item[0]
41+
knapsack.append((item[0] * fraction, item[1] * fraction))
42+
max_value += item[1] * fraction
43+
break
44+
return max_value, knapsack
45+
46+
items = [(10, 60), (20, 100), (30, 120)]
47+
capacity = 50
48+
print(fractional_knapsack(items, capacity))
49+
```
50+
51+
#### Dijkstra's Shortest Path
52+
This algorithm **finds the shortest path** in a graph by selecting the vertex with the minimum distance at each step.
53+
54+
```python
55+
import heapq
56+
57+
def dijkstra(graph, start):
58+
distances = {node: float('inf') for node in graph}
59+
distances[start] = 0
60+
priority_queue = [(0, start)]
61+
62+
while priority_queue:
63+
current_distance, current_node = heapq.heappop(priority_queue)
64+
if current_distance > distances[current_node]:
65+
continue
66+
for neighbour, weight in graph[current_node].items():
67+
distance = current_distance + weight
68+
if distance < distances[neighbour]:
69+
distances[neighbour] = distance
70+
heapq.heappush(priority_queue, (distance, neighbour))
71+
return distances
72+
73+
graph = {'A': {'B': 1, 'C': 4},'B': {'A': 1, 'C': 2, 'D': 5},'C': {'A': 4, 'B': 2, 'D': 1},'D': {'B': 5, 'C': 1}}
74+
print(dijkstra(graph, 'A'))
75+
```
76+
77+
In summary, **greedy algorithms** offer a fast and intuitive approach to optimization problems, although they may sacrifice optimal solutions for speed.
78+
79+
---
80+
81+
## 🔹 2. What are _Greedy Algorithms_ used for?
82+
83+
### Answer
84+
85+
**Greedy algorithms** are often the algorithm of choice for problems where the optimal solution can be built incrementally and **local decisions** lead to a **globally optimal solution**.
86+
87+
### Applications of Greedy Algorithms
88+
89+
#### Shortest Path Algorithms
90+
- **Dijkstra's Algorithm**: Finds the shortest path from a source vertex to all vertices in a weighted graph.
91+
92+
Use-Case: Navigation systems.
93+
94+
#### Minimum Spanning Trees
95+
- **Kruskal's Algorithm**: Finds the minimum spanning tree in a weighted graph by sorting edges and choosing the smallest edge without a cycle.
96+
97+
Use-Case: LAN setup.
98+
99+
- **Prim's Algorithm**: Starts from a random vertex and selects the smallest edge connecting to the growing tree.
100+
101+
Use-Case: Superior for dense graphs.
102+
103+
#### Data Compression
104+
- **Huffman Coding**: Used for data compression by building a binary tree with frequent characters closer to the root.
105+
106+
Use-Case: ZIP compression.
107+
108+
#### Job Scheduling
109+
- **Interval Scheduling**: Selects the maximum number of non-overlapping intervals or tasks.
110+
111+
Use-Case: Classroom or conference room organization.
112+
113+
#### Set Cover
114+
- **Set Cover Problem**: Finds the smallest set collection covering all elements in a universal set.
115+
116+
Use-Case: Efficient broadcasting in networks.
117+
118+
#### Knapsack Problem
119+
- **Fractional Knapsack**: A variant that allows parts of items to be taken, with greedy methods giving an optimal solution.
120+
121+
Use-Case: Resource distribution with partial allocations.
122+
123+
#### Other Domains
124+
- **Text Justification** and **Cache Management**.
125+
126+
---
127+
128+
## 🔹 3. Compare _Greedy_ vs _Divide & Conquer_ vs _Dynamic Programming_ algorithms.
129+
130+
### Answer
131+
132+
Let's explore how **Greedy**, **Divide & Conquer**, and **Dynamic Programming** algorithms differ across key metrics such as optimality, computational complexity, and memory usage.
133+
134+
### Key Metrics
135+
136+
- **Optimality**: Greedy may not guarantee optimality, while both Divide & Conquer and Dynamic Programming do.
137+
- **Computational Complexity**: Greedy is generally the fastest; Divide & Conquer varies, and Dynamic Programming can be slower but more accurate.
138+
- **Memory Usage**: Greedy is most memory-efficient, Divide & Conquer is moderate, and Dynamic Programming can be memory-intensive due to caching.
139+
140+
### Greedy Algorithms
141+
142+
Choose Greedy algorithms when a **local** best choice leads to a **global** best choice.
143+
144+
#### Use Cases
145+
- **Shortest Path Algorithms**: Dijkstra's Algorithm for finding the shortest path in a weighted graph.
146+
- **Text Compression**: Huffman Coding for compressing text files.
147+
- **Network Routing**: For minimizing delay or cost in computer networks.
148+
- **Task Scheduling**: For scheduling tasks under specific constraints to optimize for time or cost.
149+
150+
### Divide & Conquer Algorithms
151+
152+
Opt for Divide & Conquer when you can solve **independent subproblems** and combine them for the **global optimum**.
153+
154+
#### Use Cases
155+
156+
- **Sorting Algorithms**: Quick sort and Merge sort for efficient sorting of lists or arrays.
157+
- **Search Algorithms**: Binary search for finding an element in a sorted list.
158+
- **Matrix Multiplication**: Strassen's algorithm for faster matrix multiplication.
159+
- **Computational Geometry**: Algorithms for solving geometric problems like finding the closest pair of points.
160+
161+
### Dynamic Programming Algorithms
162+
163+
Choose Dynamic Programming when overlapping subproblems can be **solved once and reused**.
164+
165+
#### Use Cases
166+
167+
- **Optimal Path Problems**: Finding the most cost-efficient path in a grid or graph, such as in the Floyd-Warshall algorithm.
168+
- **Text Comparison**: Algorithms like the Levenshtein distance for spell checking and DNA sequence alignment.
169+
- **Resource Allocation**: Knapsack problem for optimal resource allocation under constraints.
170+
- **Game Theory**: Minimax algorithm for decision-making in two-player games.
171+
172+
---
173+
174+
## 🔹 4. Is _Dijkstra's_ algorithm a _Greedy_ or _Dynamic Programming_ algorithm?
175+
176+
### Answer
177+
178+
**Dijkstra's algorithm** utilizes a combination of greedy and dynamic programming techniques.
179+
180+
### Greedy Component: Immediate Best Choice
181+
The algorithm selects the closest neighboring vertex at each step, reflecting the greedy approach of optimizing for immediate gains.
182+
183+
#### Example
184+
Starting at vertex A, the algorithm picks the nearest vertex based on current known distances.
185+
186+
![Dijkstra's Algorithm](https://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif)
187+
188+
### Dynamic Programming Component: Global Optimization
189+
Dijkstra's algorithm updates vertex distances based on previously calculated shortest paths, embodying the dynamic programming principle of optimal substructure.
190+
191+
#### Example
192+
Initially, all vertices have infinite distance from the source, A. After the first iteration, distances to neighbors are updated, and the closest one is chosen for the next step.
193+
194+
```plaintext
195+
Initial State: A: 0, B: inf, C: inf, D: inf, E: inf
196+
After first iteration: A: 0, B: 2, C: 3, D: 8, E: inf
197+
```
198+
199+
### Primarily Dynamic Programming
200+
Despite combining both strategies, the algorithm aligns more closely with dynamic programming for several reasons:
201+
202+
1. **Guaranteed Optimality**: It provides the best solution, a hallmark of dynamic programming.
203+
2. **Comprehensive Exploration**: The algorithm reviews all vertices to ensure the shortest path.
204+
205+
---
206+
## 🔹 5. What is the difference between _Greedy_ and _Heuristic_ algorithms?
207+
208+
### Answer
209+
210+
👉🏼 Check out all 6 answers here: [Devinterview.io - Greedy Algorithms](https://devinterview.io/data/greedyAlgorithms-interview-questions)
211+
212+
---
213+
214+
## 🔹 6. Is there a way to _Mathematically Prove_ that a _Greedy Algorithm_ will yield the _Optimal Solution_?
215+
216+
### Answer
217+
218+
👉🏼 Check out all 6 answers here: [Devinterview.io - Greedy Algorithms](https://devinterview.io/data/greedyAlgorithms-interview-questions)
219+
220+
---
221+

0 commit comments

Comments
 (0)