From f1a924607567fa487e9f342141ef183956d1cdc7 Mon Sep 17 00:00:00 2001 From: NikitaSharma1 Date: Fri, 29 Apr 2022 17:10:42 +0530 Subject: [PATCH] notebook --- content/algorithms/Dijkstra/Dijkstra.md | 241 ------------ .../algorithms/Dijkstra/Graphs/figure1_2.png | Bin 44742 -> 0 bytes .../algorithms/Dijkstra/Graphs/figure3_4.png | Bin 44688 -> 0 bytes .../algorithms/Dijkstra/Graphs/figure5_6.png | Bin 42644 -> 0 bytes content/algorithms/MST Prim/MST Prim.md | 346 ++++++++++++++++++ content/algorithms/index.md | 2 +- site/index.md | 1 - 7 files changed, 347 insertions(+), 243 deletions(-) delete mode 100644 content/algorithms/Dijkstra/Dijkstra.md delete mode 100644 content/algorithms/Dijkstra/Graphs/figure1_2.png delete mode 100644 content/algorithms/Dijkstra/Graphs/figure3_4.png delete mode 100644 content/algorithms/Dijkstra/Graphs/figure5_6.png create mode 100644 content/algorithms/MST Prim/MST Prim.md diff --git a/content/algorithms/Dijkstra/Dijkstra.md b/content/algorithms/Dijkstra/Dijkstra.md deleted file mode 100644 index 96a66f1d..00000000 --- a/content/algorithms/Dijkstra/Dijkstra.md +++ /dev/null @@ -1,241 +0,0 @@ ---- -jupyter: - jupytext: - text_representation: - extension: .md - format_name: markdown - format_version: '1.3' - jupytext_version: 1.13.8 - kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Shortest path with Dijkstra's algorithm - - -When it comes to finding the shortest path for a weighted graph, Dijkstra's algorithm has always been everyone's favourite. In this notebook, we'll get to know how it works and is implemented. Shortest path problem is a graph problem where the aim is to find a path between 2 nodes having the minimum distance covered. - - -## Shortest Path Problem - - -Let's say you want to travel from Delhi(DEL), India to London(LCY), UK via flights that have various routes with different stops, namely, Frankfurt(FRA), Zurich(ZRH), Amsterdam(AMS), Geneva(GVA) and Dublin(DUB). Now, you want to find the shortest path as you are in a hurry and want to get to London as soon as possible.
-An important thing to know is that any subpath from C $\rightarrow$ E of the shortest path A $\rightarrow$ E is also the shortest path from node C to node E. That means not only one will get the shortest path from Delhi to London but also to other stops from Delhi. - -ASSUMPTIONS -- Distance taken is imaginary. -- No waiting time at airports. -- The shortest distance in this problem means shortest time costing. -- Speed is considered to be uniform -- Scale : 1 unit = 1000kms - -So, the following directed graph describes all paths available with the distance between them. - -```python -#importing libraries -import networkx as nx - -flight_path= nx.DiGraph() - -flight_path.add_nodes_from(['DEL', 'AMS', 'DUB', 'ZRH', 'FRA', 'LCY']) - -flight_path.add_weighted_edges_from([('DEL', 'ZRH', 5), ('DEL', 'FRA', 6), ('DEL', 'DUB', 7), ('ZRH', 'LCY', 6), - ('FRA', 'LCY', 3), ('AMS', 'LCY', 5),('DUB', 'LCY', 4), ('AMS', 'FRA', 1), - ('DUB', 'AMS', 2), ('ZRH', 'GVA', 3), ('GVA', 'LCY', 1)]) - -pos= nx.planar_layout(flight_path) - -# drawing customised nodes -nx.draw(flight_path, pos, with_labels=True, node_size=1300, node_color='maroon', font_color='white') - -# adding edge labels -nx.draw_networkx_edge_labels(flight_path, pos, edge_labels = nx.get_edge_attributes(flight_path, 'weight')); -``` - -## Dijkstra's Algorithm - -Dijkstra's algorithm is used to find the shortest path between nodes or commonly from one source node to every other node in the graph, where edge weight represents the cost/ distance between 2 nodes in the case of a weighted graph. It can work with both directed and undirected graphs, but it is not suitable for graphs with NEGATIVE edges.
-Time complexity of Dijkstra's algorithm is $O(\ V^{2})$, but with minimum priority queue, it comes down to $O(\ V + E\text{ log } V\ )$ - -### Algorithm - -1. Convert your problem into a graph equivalent. -2. Create a list of unvisited vertices. -3. Assign the starting point as source node with distance(cost)= 0 and other node's distance as infinity. -4. For every unvisited neighbour, calculate the minimum distance from the current node. -5. The new distance is calculated as `minimum(current distance, distance of previous node + edge weight)` -6. When all the neighbours have been visited, remove the node from the unvisited list and select the next node with the minimum distance. -7. Repeat from step 4. -8. The final graph will represent all the nodes with minimum distance and the algorithm will end. - - -Let's look at the example of the directed graph mentioned above. But, before moving forward, here are some things one should keep in mind. In the following graphs, edge weight defines the distance between 2 nodes, black edge represents unvisited edges, red represents edges that are being traversed, and green represents visited edges. Let's begin!! - - -According to Dijkstra's algorithm, -- First, assign all stops(nodes) infinite values except the source node (DEL in this case as the path starts from Delhi), which is assigned a value of 0. This is because the distance one needs to cover to reach other nodes is assumed to be unknown and, hence maximum value possible is being assigned. (fig. 1) -- Dijkstra is based on the greedy approach, which means one needs to select the node with the minimum distance, which is DEL having a distance of 0 units, and this approach is being followed in the whole process. -- The next step is to start traversing the neighbours of DEL and update the distance of all neighbouring nodes as shown in fig. 2. While updating the distance, always keep in mind that the updated distance should be `minimum(current distance, distance of previous node + edge weight)`. Like, - - DUB : `min(infinity, 7) = 7` - - FRA : `min(infinity, 6) = 6` - - ZRH : `min(infinity, 5) = 5` - - -![Figure 1&2](Graphs/figure1_2.png "Step 1 and Step 2") - - -- Now, pick the next unvisited node with the minimum distance value. ZRH has the minimum distance (5 units), so it's time to update its neighbour's (LCY, GVA) distance.(fig. 3) - - LCY : `min(infinity, 5+6) = 11` - - GVA : `min(infinity, 5+3) = 8` -- Similar to the previous step, the next unvisited node with minimum distance is FRA (6 units).Hence, update its neighbours. (fig. 4) - - AMS : `min(infinity, 6+1) = 7` - - LCY : `min(11, 6+3) = 9` - - -![Figure 3&4](Graphs/figure3_4.png "Figure 3 and Figure 4") - - -- Here, 2 nodes are left with minimum distance (7 units), AMS and DUB. So, let's update their neighbours one by one.(fig. 5) - - DUB : - - AMS : `min(7, 7+2) = 7` - - LCY : `min(9, 7+4) = 9` - - AMS: - - LCY : `min(9, 7+5) = 9` -- Among the last 2 nodes, our destination is LCY. So, last update is for GVA's neighbour. - - LCY : `min(9, 8+1) = 9` - -Figure 6 shows the final graph with shortest distance to each node from DEL(source node) and it comes out that the shortest distance to LCY from DEL is 9 units which have 2 paths:
-- (DEL $\rightarrow$ FRA $\rightarrow$ LCY)
-- (DEL $\rightarrow$ ZRH $\rightarrow$ GVA $\rightarrow$ LCY) - -So, one can take any of these paths to reach as soon as possible. But, in case there are more than one path like in this situation, dijkstra's algorithm returns the shortest path with minimum number of edges. - - -![Figure 5&6](Graphs/figure5_6.png "Figure 5 and Figure 6") - - -## NetworkX Implementation - - -In the previous example the number of nodes were less and it wasn't that complicated, but, in real life problems, there can be a lot of nodes and thus, it is needed to maintain proper record. Let's see the example in NetworkX implementation. - -```python -#importing required libraries -from heapq import heappush as push -from heapq import heappop as pop -from itertools import count - -''' -So, the graph 'flight_path' is already defined with all nodes and edges. Now, before implementing the algorithm, -one first needs to make the data available in the proper format to access. - -The first thing to do is to have a dictionary with every node as keys and (connecting node, weight) as values so that one can -traverse easily. -''' -flight_succ = flight_path._succ if flight_path.is_directed() else flight_path._adj - -# we need to extract the distance between 2 nodes from the graph and for that we need to define weight function -def _weight_function(G, weight): - return lambda u, v, data: data.get(weight, 1) - -weight = _weight_function(flight_path, "weight") - -''' -The next step is to define various dictionaries to store and track all nodes path. -''' -dist = {} # dictionary of final distances -seen = {} # dictionary of visited nodes with recent shortest distance -paths= {} # dictionary to store path list - -# fringe is heapq with 3-tuples (distance,c,node) -# use the count c to avoid comparing nodes (may not be able to) -c = count() -fringe = [] - -# we want to find the shortest distance from DEL to LCY -source='DEL' -target='LCY' -paths[source]=[source] - -# Now, as I said earlier we'll assign the source node 0 value -seen[source] = 0 -push(fringe, (0, next(c), source)) - -''' -It's time to start traversing the graph starting from source node. -''' - -while fringe: - (d, _, v) = pop(fringe) # d will store the distance of the node and v will store the node name - if v in dist: - continue # already searched this node. - dist[v] = d - if v == target: - break - - # traversing the neighbours of the node - for u, e in flight_succ[v].items(): - distance = weight(v, u, e) - - if distance is None: - continue - # vu_dist stores the total distance from source node to u. Like, if v=ZRH and u= GVA, then vu_dist = 8 - vu_dist = dist[v] + distance - - ''' - If u is already in dist then there can be 2 cases, either the graph has negative cycle or there might - be another shortest path to u. - ''' - if u in dist: - u_dist = dist[u] - if vu_dist < u_dist: - raise ValueError("Contradictory paths found:", "negative weights?") - - # updating the new shortest distance and adding the next node to visit - elif u not in seen or vu_dist < seen[u]: - seen[u] = vu_dist - push(fringe, (vu_dist, next(c), u)) - if paths is not None: - paths[u] = paths[v] + [u] - -# printing the distance and path from the source node 'DEL' to target node 'LCY' -print(dist[target], paths[target]) -``` - -Don't worry, you don't need to write all this code again and again. NetworkX got you covered!! So, NetworkX provides a lot of functions with the help of which one can actually find the [shortest path](https://networkx.org/documentation/stable/reference/algorithms/shortest_paths.html) based on their needs. - -All functions using dijkstra's algorithm are similar, but, for this example the most suitable is [single_source_dijkstra()](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.weighted.single_source_dijkstra.html#networkx.algorithms.shortest_paths.weighted.single_source_dijkstra). It comes out that this function actually gives the same output as the one calculated in the above example. - -```python -nx.single_source_dijkstra(flight_path, 'DEL', target='LCY', weight="weight") -``` - -## Applications of Dijkstra's Algorithm - -It is used as a part of applications to find the shortest path if required. There are other factors as well which are considered in every application while implementing Dijkstra's algorithm. Like, -- In special drones or robots for delivery service, it is used as a part to identify the shortest path possible. -- One of the most common use case is Google Maps. It helps to find the best route possible in shortest time. -- In social media applications, for smaller graphs it can be used effectively to suggest the "people you may know" section. -- As the above example, it can be used in a software which calculates and informs the estimate arrival time, best route etc. of a flight to a user. -- It is used in IP routing to find Open shortest Path First. -- It is used in the telephone network. - - -## Advantages and Disadvantages of Dijkstra's Algorithm - -ADVANTAGES - - Once it is carried out, we can find the shortest path to all permanently labelled node. - - Only one diagram is enough to reflect all distances/paths. - - It is efficient enough to use for relatively large problems. - -DISADVANTAGES -- It cannot handle negative weights which leads to acyclic graphs and most often cannot obtain the right shortest path. -- It is a greedy algorithm that means it is possible for the algorithm to select the current best option which can make the algorithm get sidetracked following a potential path that doesn’t exist, simply because the edges along it form a short path. - - -#### Reference - -Shivani Sanan, Leena jain, Bharti Kappor (2013). (IJAIEM) "Shortest Path Algorithm"
-https://www.ijaiem.org/volume2issue7/IJAIEM-2013-07-23-079.pdf diff --git a/content/algorithms/Dijkstra/Graphs/figure1_2.png b/content/algorithms/Dijkstra/Graphs/figure1_2.png deleted file mode 100644 index bc64151fc24259548dad0d40659dbd8244a4f7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44742 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 diff --git a/content/algorithms/Dijkstra/Graphs/figure3_4.png b/content/algorithms/Dijkstra/Graphs/figure3_4.png deleted file mode 100644 index 974eeed54622fad1b3bf1d52e6645d71992e37dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44688 zcmb5V3E0!r_BV>JD3i$G2qJ?ZDgri1)4`)a(>86>rcK+VY2tuMlXObQq*DL^QB*)t zaR3oPaX>&p5fv1~gP`KetOyRE;J~DS$RLQ^UGRUubI-l^dA{#?(!9yuJ1c9iy@uaf zJMY6((9^kN&yH={wCU{gx*~1bTsW^yn+u%nF9t2vyZVm+e=g7>9<0q98+z?)(`Lv5 z-5u9+btSFJZLUY0=dZ4ZO{s#WUyr!1hhd>u94e)SWLd~*L-Vo@nm~W9Af=VGES(<% zn_zf|$vnhlry=-y!~sFzWI~79O=kZ5cp)k0{~?GDH30%Qvgy23sA=FbNP`n(0?h~p zu0V&yeEza-G2aAQ9L1t4v$E(Ft6?W z461TjOBeFzhe6h%=AqE}4!u#7&$lKEg`^5z+9X*7GuF;Go0~0&8;JKGIfCx=Kav}% zR1`-=lp77JB9Sf^;Vl{G3FHO9|G5puaQz9T^SrSmhG_!z`2!VJ?zKpkA2NbI~9$<^0%bpagT!?mo1;v?s z!H6eB&Nh;--R%P^xNr|&I6Pi+@ zI!jYf$n7O+a6qG}S{w=n0Yx|Il4=3PWmlAvq+k&jH~8E zTqYSUpAyY(OTy%>@+m>4lirfa!lFhB&<77=b<`Xb5>?1e%UsX{1z^M+J=YgS=%UvV zvNr-;E~^?*Tgrz*LMB>Ia;Y4PaZuWA(GboO;pjxr4O6r!*>FmJLaf*&-dQISDFh;- zY+l5Dloj(kG7fLpnN6UK6iV30cv*0WNyEknhLbXpgcEf!R26qIeu`njWtjFtSRqu% zAYw9bPU8%fO2li?s;q=fHYLPcIgzJ1Czl|KA-WdG6=aW?z@Y{jMbwB(DFu>Xa_NAc zD+j}H08aXtbkd!u*7I^%1mZGmiGW^@#@yBbDhj4bn%0OMQmC}%C_89qEyk;XvE1S%PlOzwcBW|_D3R1xb*o-th9$pIrj zlMRdIgfp1TC6i_>5-vHy#kl6E(IHd8%*sAb)|;tTRkl!fRV2NH6M%pa(qVziX;Q>u zW0YK=Sj*TxaU0FQbZ2bwLKlA%UPVw?__ zT2j2`f`r-9CR)gbLaDIgP0DH-tMNFeC9tv`ybeKZS}YW0+$7ZCoj!yNm4s|1mGj9B z&u*Uiavu3Qb3S--FD4|ocyCuMTjlv)7trafNF3MpjSY9v*gUiBuxQ%al) z`jFZVLK}kx+zX%wZJE1oFPH8zKve;SV!W%7#F2MDmw%g`$m#c!j1%lbz;< zoiO>UX-0QP+@QsS7GTH%6K1C+52b0Ri6+g#s?G(CMA?xKvOp-PJ;JyRhbxHds5f4V z7=cpCLmFYULitNIE13)9tlLOCNHML1`vvuNGv zH()>%i@{9IT_78@rOb!<3=hH1lpdDqsH+O$j&*p$0sxjU z)W;Qzkpx~tin2ub;^iD_;$88)2Du}il#=&Y>MlFf$R*UM(8!Qk6+&Z5QS_%`o{$Sm z!7;zyhz28ZH6oW2X`$qQ%z;fBPb11CK58o!l78)V&PCPPP@vOiAg0= zYS?Urq>^f{=V51}tK@V2c!Dl~B@yvJB+0=_P}sL(vik=YlCCKr_~~T9*p| za1@-HAQ$Ou#A%7DL?Hq=%`w@$D^H;1qLi)Ueku?SfJo}$aE)bM79T2D3oH>qC0-yo z$&tpYIV~lI*?`R#t~S+Oic0Qqpk$sHbApQo}+vQVlT$ zF+|?SSpyBNk|C3ctcqpS5>bOP8D3%~mUD?E6qN}&j;l}%;Zry#)x>y;tdv4174W*s zCZSRe#hhkIRdG~Ot%YjL0)^Q2qiKj*2u)jZE@y%iSBgoPH^q zLbFj9iIO$-`T6pEc>g7U}ea1 zIP8}-YtS&VIoQg(FoiNzbV4>VW-l-n;Mld0tc5&ruErN>yo!cAMU%;8D(30}pY!C4 zAxMnql`5M+1begr<*QU8mavNEhO^cLN;Z_WWaXGu}2f?-IN&5;P2FM48mGy|Y0p0EqGoUVp!c&gyj6B3zB zyL`ctEmyL6%S9WPvFmCAz$VlK@=J{Kd#q`HF=3-3AYjK#RI=>MK!6PB181dbm>|1C z*`Wk4nrtwI+U*68kut+_#Su@Wq+q~>WtB`Evg%5}K@7#}DLAF0MMMPxz*1<{k*?dqf?f5I z)?h`;<8UgPk*%yRhWMmR&{`=uu~5nf)1|mTWJ;ABnWKxi;-HO8*@IQeMJ!FaO?j4Z zyQPZVu<@kXWv!>pL`=_`icyEn5pW2OV#Hb3=%%lNy@`4g;+Y(fBG@fa0!zqsK4{~c zD`9g7eGQvzDFbvCtQ&cMlu|0`O4XxS0~J%%kvQi?Xu60Rl*P-2xLP!u@xyc_6_Y%) znxj}#(dX4LNv-*-3K?;#9@Z}4u$1FDM~dMbQh~u!Sk6iTU)x9&>}jn+Fa=9AQ9w{q zⓈ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 diff --git a/content/algorithms/Dijkstra/Graphs/figure5_6.png b/content/algorithms/Dijkstra/Graphs/figure5_6.png deleted file mode 100644 index 780978550e6347f00452acc447fed08361514175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42644 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 Spanning Trees are constructed using Prim's and Kruskal's algorithm. + +When each and every node of a graph is connected to each other without forming any cycle, it is known as the Spanning Tree. A graph $G$ having $n$ nodes will have spanning trees with $n$ nodes and $n-1$ edges. Thus, as its name indicates, Minimum Spanning Tree is the tree with the shortest possible distance covered among all other spanning trees.
Let's look at the following example to understand this better. + + +## Minimum Spanning Tree Problem + + +Suppose there are 5 cities (A, B, C, D and E) that needs to be connected via road. Now, there can be more than one path connecting one city to another but our goal is to find the one having the shortest distance. + +ASSUMPTION: Distance taken is imaginary. + +The following graph depicts our situation in this case. + +```python +# importing libraries +import networkx as nx +import matplotlib.pyplot as plt + +roads = nx.Graph() + +# adding weighted edges +roads.add_weighted_edges_from( + [ + ("A", "B", 1), + ("A", "C", 7), + ("B", "C", 1), + ("B", "D", 4), + ("B", "E", 3), + ("C", "E", 6), + ("D", "E", 2), + ] +) + +# layout of the graph +position = {"A": (0.5, 2), "B": (0, 1), "C": (1, 1), "D": (0, 0), "E": (1, 0)} +pos = nx.spring_layout( + roads, pos=position, weight="weight", fixed=["A", "B", "C", "D", "E"] +) +fig = plt.figure(figsize=(5, 5)) + +# drawing customised nodes +nx.draw( + roads, + pos, + with_labels=True, + node_size=900, + node_color="#DF340B", + font_color="white", + font_weight="bold", + font_size=14, + node_shape="s", +) + +# adding edge labels +nx.draw_networkx_edge_labels( + roads, + pos, + edge_labels=nx.get_edge_attributes(roads, "weight"), + font_size=12, +); + +``` + +Now, in order to find the minimum spanning tree, this notepad will cover the Prim's algorithm. +Let's understand it in detail. + + +## Prim's Algorithm +Prim's algorithm uses greedy approach to find the minimum spanning tree.That means, in each iteration it finds an edge which has the minimum weight and add it to the growing spanning tree. + +The time complexity of the Prim’s Algorithm is $O((V+E) \text{ log} V)$ because each vertex is inserted in the priority queue only once and insertion in priority queue take logarithmic time. + +Algorithm Steps +1. Select any arbitrary node as the root node and add it to the tree. Spanning tree will always cover all nodes so any node can be a root node. +2. Select the node having the minimum edge weight among the outgoing edges of the nodes present in the tree. Ensure the node is not already present in the spanning tree. +3. Add the selected node and edge to the tree. +4. Repeat steps 2 and 3 until all nodes are covered. +5. The final graph will represent the Minimum Spanning Tree + + +### Example solution +Let's get back to the example and find its minimum spanning tree using Prim's algorithm. Before moving forward, here are a few notations that one should remember: +- Red nodes represent unvisited vertices while green nodes represent visited vertices. +- Edges of minimum spanning tree are represented in purple color. + +```python +# converting graph to dictionary +road_list = roads._adj + +# infinity is assigned as the maximum edge weight + 1 +inf = 1 + max([w['weight'] for u in road_list.keys() for (v,w) in road_list[u].items()]) + +# initialising dictionaries +(visited, distance, TreeEdges) = ({}, {}, []) +``` + +### Step 1 +Suppose the road construction starts from city A, so A is the source node. The distance of other cities is assumed to be unknown, so all other visited vertices are marked as 'not visited' and the distance as infinite (which equals 8 in this case). + +```python +# assigning infinite distance to all nodes and marking all nodes as not visited +for v in road_list.keys(): + (visited[v], distance[v]) = (False, inf) # false indicates not visited +visited['A'] = True +distance['A']=0 + +# plotting graph +# Nudge function is created to show node labels outside the node +def nudge(pos, x_shift, y_shift): + return {n: (x + x_shift, y + y_shift) for n, (x, y) in pos.items()} + +pos_nodes = nudge(pos, 0.025, 0.16) # shift the layout +fig= plt.figure(figsize=(5, 5)) + +# assigning green color to visited nodes and red to unvisited. +node_colors = ["#4EAD27" if visited[n] == True else "#DF340B" for n in visited] +labels = {v:distance[v] for v in distance} + +# plotting the base graph +nx.draw( + roads, + pos, + with_labels=True, + node_size=900, + node_color=node_colors, + font_color="white", + font_weight="bold", + font_size=14, + node_shape="s", +) +# adding node labels +nx.draw_networkx_labels( + roads, + pos= pos_nodes, + labels= labels, + font_size= 14, + font_color='blue' +) +# adding edge labels +nx.draw_networkx_edge_labels( + roads, + pos, + edge_labels=nx.get_edge_attributes(roads, "weight"), + font_size=12, +); +``` + +### Step 2 +Now, the next step is to assign distances to A's neighbouring cities and the distance is equal to the edge weight. This needs to be done in order to find the minimum spanning tree. The distance will be updated as `minimum(current weight, new edge weight)`.
+Here, the following nodes will get updated: +- B : `min(1, 8) = 1` +- C : `min(7, 8) = 7` + +```python +# updating weights of A's neighbour +for (v, w) in road_list["A"].items(): + distance[v] = w["weight"] +# plotting graph +fig = plt.figure(figsize=(5, 5)) + +node_colors = ["#4EAD27" if visited[n] == True else "#DF340B" for n in visited] +labels = {v: distance[v] for v in distance} + +# plotting the base graph +nx.draw( + roads, + pos, + with_labels=True, + node_size=900, + node_color=node_colors, + font_color="white", + font_weight="bold", + font_size=14, + node_shape="s", +) +# adding node labels +nx.draw_networkx_labels( + roads, pos=pos_nodes, labels=labels, font_size=14, font_color="blue" +) +# adding edge labels +nx.draw_networkx_edge_labels( + roads, + pos, + edge_labels=nx.get_edge_attributes(roads, "weight"), + font_size=12, +); + +``` + +### Step 3 & Step 4 +After updating the distance in the previous step, it's time to find the next node with the minimum distance. To do this, iterate across the neighbours of the visited nodes and find the node with the minimum distance. Then update its distance and mark it as visited. + +```python +# initialising the required dictionaries for plotting graphs +visited_list = [] +distance_list = [] +edge_list = [] + +# iterating through every node's neighbour +for i in road_list.keys(): + (mindist, nextv) = (inf, None) + for u in road_list.keys(): + for (v, w) in road_list[u].items(): + d = w["weight"] + + # updating the minimum distance + if visited[u] and (not visited[v]) and d < mindist: + (mindist, nextv, nexte) = (d, v, (u, v, d)) + if nextv is None: # all nodes have been visited + break + visited[nextv] = True + visited_list.append(visited.copy()) + # adding the next minimum distance edge to the spanning tree + TreeEdges.append(nexte) + edge_list.append(TreeEdges.copy()) + + # updating the new minimum distance + for (v, w) in road_list[nextv].items(): + d = w["weight"] + if not visited[v]: + distance[v] = min(distance[v], d) + distance_list.append(distance.copy()) + +``` + +Let's understand each iteration and plot the graph! + +Figure 1
+B has the minimum distance of 1 unit from Node A and hence got added in the spanning tree. The next step is to update the distance of B's neighbour, which are as follows: +- A : Already visited +- C : `min(7, 1)` = 1 +- D : `min(8, 4)` = 4 +- E : `min(8, 3)` = 3 + +Figure 2
+The next node with the minimum distance is C with a distance of 1 unit, so now C will get added to the spanning tree, and it's neighbours will get updated: +- A : Already visited +- B : Already visited +- E : `min(3, 6)` = 3 + +Figure 3
+Among the last 2 nodes, E has the minimum distance of 3 units. So, E will get added to the spanning tree, and its neighbours will get updated: +- B : Already visited +- C : Already visited +- D : `min(4, 2)` = 2 + +Figure 4
+The final node D, with a distance of 2 units, got connected to the minimum spanning tree. This figure illustrates the final Minimum Spanning Tree of the example. + +```python +fig, axes = plt.subplots(2, 2, figsize=(15,15)) +c=0 +for v,d,ax,edges in zip(visited_list,distance_list,axes.ravel(), edge_list): + c+=1 + ax.set_title("Figure "+str(c), fontsize=16) + node_colors = ["#4EAD27" if v[n] == True else "#DF340B" for n in v] + labels = {k:d[k] for k in d} + nx.draw( + roads, + pos, + with_labels=True, + node_size=900, + node_color=node_colors, + font_color="white", + font_weight="bold", + font_size=14, + node_shape="s", + ax= ax +) + nx.draw_networkx_edges( + roads, + pos, + edgelist=edges, + width=3, + edge_color="#823AAF", + ax=ax, +) + + nx.draw_networkx_labels( + roads, + pos= pos_nodes, + labels= labels, + font_size= 14.5, + font_color='blue', + ax= ax +) + nx.draw_networkx_edge_labels( + roads, + pos, + edge_labels=nx.get_edge_attributes(roads, "weight"), + font_size=12, + ax=ax +); + +``` + +### Step 5 +The final output of the program is stored as a list of tuples in `TreeEdges` as shown below. + +```python +print(TreeEdges) +``` + +## NetworkX Implementation + +The above code is a basic implementation of Prim's algorithm with the time complexity of $ O (mn)$, which further can be improved to $O((V+E) \text{ log} V)$ with the help of priority queues. Here's the good part, with the help of NetworkX functions, one can implement it in $O((V+E) \text{ log} V)$ without even writing the whole code.
+NetworkX provides various [Tree](https://networkx.org/documentation/stable/reference/algorithms/tree.html#) functions to perform difficult operations, and [minimum_spanning_tree()](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.tree.mst.minimum_spanning_tree.html#networkx.algorithms.tree.mst.minimum_spanning_tree) is one of them. Not only this, you can also find the maximum spanning tree with the help of the [maximum_spanning_tree()](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.tree.mst.maximum_spanning_tree.html#networkx.algorithms.tree.mst.maximum_spanning_tree) function.
+The following code uses NetworkX function and gives us the same output as our code. + +```python +MST= nx.minimum_spanning_tree(roads, algorithm= 'prim') +print(sorted(MST.edges(data=True))) +``` + +## Applications of Prim's Algorithm +- It is used to solve travelling salesman problem. +- As said earlier, used in network for roads and rail tracks connecting all the cities. +- Path finding algorithms used in artificial intelligence. +- Cluster analysis +- Game development +- Maze generation + +There are many other similar applications present in this world. Whenever there's a need to find a cost-effective method to connect nodes (it can be anything), there's a high chance of Prim's algorithm playing its role in the solution. + + +## Reference +R. C. Prim "Shortest connection networks and some generalizations." The bell system technical journal, Volume: 36, Issue: 6, (Nov. 1957): 1389-1401
+https://ia800904.us.archive.org/18/items/bstj36-6-1389/bstj36-6-1389.pdf diff --git a/content/algorithms/index.md b/content/algorithms/index.md index e20f18ff..1a94f454 100644 --- a/content/algorithms/index.md +++ b/content/algorithms/index.md @@ -10,5 +10,5 @@ maxdepth: 1 assortativity/correlation dag/index flow/dinitz_alg -Dijkstra/Dijkstra +MST Prim/MST Prim ``` diff --git a/site/index.md b/site/index.md index 5d60e453..0ae60dc3 100644 --- a/site/index.md +++ b/site/index.md @@ -38,6 +38,5 @@ maxdepth: 1 content/algorithms/index content/generators/index content/exploratory_notebooks/facebook_notebook - ```