我无法决定是否在这两种情况下使用bfs或dfs
情况1:图是不平衡的无向边加权树,高度为40,任何叶节点的最小深度为38.什么是从根到任何叶子找到最小边缘成本的最佳算法
情境2:图表是最大堆,该算法最适合在堆的每个级别内找到最大密钥值。
对于情况1我正在考虑DFS,因为您不必遍历所有分支以找到最小的分支,第二分支比您停止的比较大。
表示情况2我正在考虑BFS,因为BFS一次从每个级别获取所有节点,并且更适合比较..
任何建议?
答案 0 :(得分:0)
我假设在两种情况下你都只有一个指向树/堆根的指针。
无论您使用BFS还是DFS,两种情况的最坏情况时间复杂度都是O(n)
,其中n
是节点数。因此,您可以提出的任何优化平均值为#34;"优化
你是正确的,因为你给出的确切原因,DFS可能比情况1的BFS表现更好。
但是,对于情况2,DFS并不比BFS慢(理论上至少),因为您可以简单地将每个节点存储在相应的级别,然后比较每个级别中的所有节点。然而,对于空间复杂性,BFS会更好,因为一旦完成一个级别并且你移动到下一个级别,你就不必存储任何父节点。因此,建议在情况2中使用BFS。