BFS vs DFS

找最短路徑用BFS, 其他時用DFS用得多一些, 因為遞迴較好寫

假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N) BFS算法, Queue每次都會存二叉樹一層的節點,最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N)

DFS

  • 回溯算法 (Backtracking)
  • DFS 也可以找到最短路徑, 時間複雜度一樣式O(n). 但實際效能比 BFS 低很多. 因為 DFS 靠遞迴方式記錄走過的路徑, 要找到最後路徑, 需要把整顆樹走完, 然後才比對出最段路徑; BFS 藉由 Queue 一步一步齊頭並進, 可以在樹還沒走完時找到最短路徑. 雖然兩者最壞的時間複雜度都相等, 但實際 BFS效能較好

BFS

  • Queue
  • BFS 找到的路徑一定是最短的, 代價是空間複雜度比 DFS 大很多

https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0310.Minimum-Height-Trees/main.go

© Kimi Tsai all right reserved.            Updated : 2023-07-12 09:04:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""