我是有點果醬搜索出該Java方法的遞推公式通緝:在階二叉樹輸出方法的遞推公式
void printInorder(Node<T> v) {
if(v != null) {
printInorder(v.getLeft());
System.out.println(v.getData());
printInorder(v.getRight());
}
}
一些標準:
- 其一個完整的二叉樹(每隔內結有2個孩子,每葉有相同的深度)
- 樹具有n結和一個爲O(n)的複雜性
我必須找到與n knots
的樹的depth h
相關的遞推公式,作爲額外的獎勵,我需要從中導出O(n)的顯式公式。現在
,這是我的了:
d = depth of the tree
c = constant runtime for execution of the method itself
d = 1: T(n) = c
d = 3: T(n) = T(d=1) + T(d=2) + T(d=3) + c
我使用的示例d = 3,以澄清事情,我自己也有困難進一步打破下來。我的假設是否正確?
編輯:事物
[x] = { x in real numbers : max([x]) <= x }, [x] rounded down to next full number
d = 1: T(d) = 1
d > 1: T(d) = 2^(h-1) * T(n/(2^(h-1)))
1: T(h) = T(i = 0) + T(i = 1) + ... T(i = h-1)
2: T(h) <= (2^(0-1) + n/(2^(0-1))) + (2^(1-1) + n/(2^(1-1))) + ... + (2^(h-2) + n/(2^(h-2)))
3: T(h) = n + n + ... + n
4: T(h) = (h-1)n
5: T(h) = O(n)
因爲樹深度的每一級包含恰好2 ^(H-1)的節點 接着嘗試,在第4行第h因子可以因爲忽略n與最終結果更相關。