Skip to main content

DFS Performance Measurement

Completeness

DFS is not complete, to convince yourself consider that our search start expanding the left subtree of the root for so long path (maybe infinite) when different choice near the root could lead to a solution, now suppose that the left subtree of the root has no solution, and it is unbounded, then the search will continue going deep infinitely, in this case, we say that DFS is not complete.


Optimality 

Consider the scenario that there is more than one goal node, and our search decided to first expand the left subtree of the root where there is a solution at a very deep level of this left subtree, in the same time the right subtree of the root has a solution near the root, here comes the non-optimality of DFS that it is not guaranteed that the first goal to find is the optimal one, so we conclude that DFS is not optimal.


Time Complexity

Consider a state space that is identical to that of BFS, with branching factor b, and we start the search from the root. Maximum depth m. 

In the worst case, that goal will be in the shallowest level in the search tree resulting in generating all tree nodes which are O(bm).


Space Complexity

Unlike BFS, our DFS has very modest memory requirements, it needs to store only the path from the root to the leaf node, besides the siblings of each node on the path, remember that BFS needs to store all the explored nodes in memory.

DFS removes a node from memory once all of its descendants have been expanded. With branching factor and maximum depth m, DFS requires storage of only bm + 1 nodes which are O(bm) compared to the O(bd+1) of the BFS.


Comments

Popular posts from this blog

Difference between a Singly LinkedList and Doubly LinkedList

Compare Static and Dynamic Binding

 Connecting a method call to the method body is known as binding. There are two types of binding: -static binding (also known as early binding).  -dynamic binding (also known as late binding). Static binding in occurs during compile time while dynamic binding occurs during runtime. private , final and static methods and variables use static binding and are bonded by compiler while virtual methods are bonded during runtime based upon runtime object. Static binding uses Type ( class in Java) information for binding while dynamic binding uses object to resolve binding. Overloaded methods are bonded using static binding while overridden methods are bonded using dynamic binding at runtime.