我知道这个算法是如何工作的,但不能决定何时使用哪种算法?
是否有一些指导原则,其中一个比其他或任何考虑因素表现更好?
非常感谢。
发布于 2010-05-13 03:38:26
如果你想找到一个步数最短的解决方案,或者如果你的树有无限的高度(或者非常大),你应该首先使用广度。
如果你有一棵有限的树,并且想要用最少的内存遍历所有可能的解决方案,那么你应该首先使用深度。
如果你正在寻找下棋的最佳走法,你可以使用iterative deepening,它是两者的组合。
IDDFS结合了深度优先搜索的空间效率和广度优先搜索的完整性(当分支因子有限时)。
发布于 2010-05-13 04:22:39
如果图有一些有意义的“自然分层”(例如,越近的节点代表“更接近”的结果),并且目标结果可能位于离起点更近的位置,或者起点“搜索成本更低”,则BFS通常很有用。
当你想找到最短路径时,BFS是一个自然而然的选择。
如果您的图是无限的或按语法生成的,那么您可能希望在冒险进入更近的层之前搜索更近的层,因为在到达更近的节点之前探索远程节点的成本很高。
如果由于内存/磁盘/局部性问题,访问更多的远程节点会更加昂贵,那么BFS可能会更好。
发布于 2010-05-13 04:24:45
使用哪种方法通常取决于应用程序(即,例如,拓扑排序需要深度优先搜索,而用于寻找最大流的Ford-Fulkerson算法需要广度优先搜索。
https://stackoverflow.com/questions/2822139
复制相似问题