So, we saw that the Dijkstra Algorithm has a very high worst case complexity. Despite the high complexity of the algorithm, there are several practical improvements that will enhance the performance of the method. One of them is Bi-directional Dijkstra Algorithm. The idea is very simple, we will go forward from the source now and backward from the target node and stop when the two expanding frontiers meet. We will briefly illustrate the process without going deep into the details of every step. So the technique starts just like the regular method. The control moves from I to F at a cost of 5. But then, it switches and starts from the target, and moves backward along the edges. So from A, it comes to D or C. We'll chose D, because an AD is a least weight part. Now the forward step is performed again, and we traverse from F to G. We are skipping the expansion to J because as we saw before, it does not contribute to the path. So the total rate of the IFG path is 15. The backward process then reaches G through D. The cost of the IFG is 15. And the cost of ADG is also 15. We stop because a common node is reached. We need to ensure that the weight of the forward path and that of the reverse path are added, and the total combined rate is minimal. At this point, we can concatenate the partial paths to construct the full shortest path, which is IFGDA. Now one point to remember is that the length of the smallest weight path can be longer than the shortest hop path. Here the FCA path has 2 hops but a weight of 20. But the weight of the 3 hop path, FGDA, is 15. So just remember that.