BFS消耗大量内存,尤其是在树的分支因子很大时。另一方面,如果树的深度很大,DFS可能需要很长时间才能访问其他相邻节点,但是它具有更好的空间复杂性。例如,在BFS中,如果我的分支因子为10,深度为12,则使用公式O(b^d)
,这意味着我将拥有约10 ^ 12个节点。如果每个节点为10Bytes,则大约需要10TB。
但是,这里所谓的“巨大”是什么? 10TB的空间复杂性是否被认为是巨大的(不过我很确定是这样)?如何确定何时应该离开DFS和BFS并寻找其他算法?它们是否仍在现代应用程序中使用,还是采用了其他更好的算法(例如IDDFS)?
答案 0 :(得分:0)
请考虑以下来源:When is it practical to use Depth-First Search (DFS) vs Breadth-First Search (BFS)?
我认为您可以针对自己的数据和资源进行实验。如果测试用例的结果不令人满意,请尝试其他算法。二叉树搜索,KDTree是一些选项。
如果内存有限,请尝试使用“磁盘”保存搜索的当前状态。