[英]How to calculate time complexity of DFS algorithm?
像下面的函數一樣,如何計算其時間復雜度? 我認為應該是O(m * n)...
int uniquePaths(int m, int n) {
if (m < 1 || n < 1) return 0;
if (m == 1 && n == 1) return 1;
return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}
為了表示m = M和n = N的問題,我們將其寫為<M, N>
。 如果我們嘗試繪制此問題的遞歸樹:
<M, N>
<M-1, N>
和<M, N-1>
<0, 0>
葉子。 但是,這棵樹最大可能的深度是多少? 是1 (M + N)。 此外, 每個節點<M, N>
可以中斷至多兩條路徑,即。 <M-1, N>
和<M, N-1>
。
那么,最大可能的葉子數是多少? (提示:2 (M + N) )
好吧,由於每個節點都分解為兩個節點,所以在每個級別上,葉子的數量將乘以2,從根的1開始。
因此,算法的復雜度可以上限為O(2 (m + n) )。
1最長的路徑將從<M, N>
,首先到<0, N>
。 然后從那里轉到<0, 0>
。 因此,最長可能的路徑長度= M +N。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.