在我的AI课程中,我了解了BFS,DFS和UCS。在我的算法课程中,我学习了Dijkstra的算法。
我们是否仅应用BFS和DFS之类的搜索算法来确定某个特定节点是否存在,或者它是否能像Dijkstra算法那样提供最短路径?
答案 0 :(得分:1)
Dijkstra的算法只是BFS的一种概括-如果所有边缘权重都等于1,则BFS在概念上与Dijkstra相同。
如果所有边缘权重均等于1,BFS (宽度优先搜索)将为您提供最短的路径(如成本最低),但不会(不必要),因为它探索节点的顺序根本不取决于边缘权重。
DFS (深度优先搜索)不一定会为您提供最短的路径,因为它一次只探索一条任意路径-也许您很幸运,而且该路径是最短的路径,但通常不会的。它会为您提供树中最短的路径,但这仅是因为到任何给定节点的路径都完全相同。
UCS (统一成本搜索)works very similarly to Dijkstra's algorithm,并且还会返回最短路径,但返回到单个目标节点,而不是所有其他节点。
对于下图,假设我们从A开始,然后转到E。
A 1 C 1 D
O---O---O
100 | | 1
O-------O
B 100 E
BFS和DFS都可以或将返回更昂贵的路径(A-B-E = 200,而不是A-C-D-E = 3)。
BFS将访问B(A-B)和C(A-C),然后访问E(A-B-E)和D(A-C-D)。此时,由于已达到目标,它将停止,并返回更长的路径A-B-E。
DFS可以开始任意访问B或C。如果它首先访问C,它将返回最短路径A-C-D-E,但是如果它首先访问B,它将探索A-B-E并返回该较长路径。