Skip to content

Commit d48f696

Browse files
authored
Create README.md
1 parent 6304f5d commit d48f696

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

README.md

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Reverse Delete Algorithm (Minimum Spanning Tree)
2+
Greedy Algorithm to find a minimum spanning tree in an undirected graph by deleting heaviest edges unless it would disconnect the graph
3+
4+
## Problem Statement
5+
**Minim Spanning Tree:** a subset of nodes that touches all vertices while keeping all nodes connected and uses the sum of the edge weights in a minimum
6+
A Minimum spanning tree yields a graph with **M-1** edges because adding 1 more edge would by definition create a cycle
7+
8+
### Graph
9+
![](images/graph.png)
10+
11+
### Minimum Spanning Tree
12+
![](images/mst.png)
13+
#### Weight = 18+14+9+7+6+5+2 = 61
14+
15+
## Reverse Delete Greedy Strategy
16+
**Start with all edges in the tree T. Consider edges in descending order of weight. Delete edge from T unless doing so would disconnect T**
17+
18+
- Sort edges by weight
19+
- Initialize MST with all edges
20+
- Delete the highest weight edge
21+
- If deleting the edge disconnects the graph, add it back
22+
- Otherwise continue
23+
24+
## Usage
25+
- Node names are consecutive integers starting from `0`
26+
- Create a graph: `ArrayList<Edge> graph = new ArrayList<Edge>();`
27+
- Graph undirected edge list, but **only add each edge once**
28+
- In the graph there is an edge from `0` to `9` with weight=`9`
29+
- This bidirectional edge can just be represented once: `graph.add(new Edge(0, 1, 9));`
30+
- Count the vertices in the graph: `int vertexCount = 8;`
31+
- Call the static method `ReverseDeleteMST.findMST(graph, vertexCount);`
32+
33+
# Code Notes
34+
- Due to the implementation of Breadth First Search, the code creates an additional copy of the graph as an adjacency list
35+
- This adjacency list graph is the one where edges are deleted, the original input graph as an edge list is left in tact
36+
- The MST is technically built up from nothing and added to if deleting an edge in the adjacency list would disconnect the graph
37+
38+
## References
39+
- [Kevin Wayne Slides](https://www.cs.princeton.edu/~wayne/kleinberg-tardos/pdf/04GreedyAlgorithmsII.pdf#page=14)
40+
- [University of Illinois - Minimum Spanning Trees](https://courses.engr.illinois.edu/cs473/sp2011/Lectures/12_notes.pdf)
41+
- [T. M. Murali Slides](http://courses.cs.vt.edu/cs5114/spring2009/lectures/lecture05-greedy-graph-algorithms.pdf#page=36)
42+
- [Fan Chung Graham Slides](http://www.math.ucsd.edu/~fan/teach/202/14/04mst.pdf#page=11)
43+
- [Reverse Delete Algorithm - GeeksForGeeks](http://www.geeksforgeeks.org/reverse-delete-algorithm-minimum-spanning-tree/) Algorithm strategy, code only briefly referenced
44+
- [Remove items from ArrayList with certain value - Stack Overflow](https://stackoverflow.com/a/29107463/8132253) Lambda expression to delete specific value from `ArrayList`

0 commit comments

Comments
 (0)