Java 通缉:有序二叉树输出法的递推公式

Java 通缉:有序二叉树输出法的递推公式,java,complexity-theory,recurrence,inorder,Java,Complexity Theory,Recurrence,Inorder,我在搜索这个java方法的递归公式时遇到了点麻烦 void printInorder(Node<T> v) { if(v != null) { printInorder(v.getLeft()); System.out.println(v.getData()); printInorder(v.getRight()); } } 我用d=3的例子为自己澄清了一些事情,我很难把它进一步分解。我的假设正确吗 编辑: 下一次尝

我在搜索这个java方法的递归公式时遇到了点麻烦

void printInorder(Node<T> v) {
    if(v != null) {
        printInorder(v.getLeft());
        System.out.println(v.getData());
        printInorder(v.getRight());
    }
}
我用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)
[x]={x实数:max([x])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)T(n)=T(n/2)+T(n/2)+1

  • 级别0有1个操作

  • 1级有2个操作

  • 2级有4个操作

  • 级别k有2^k个操作

  • 树的深度为lgn

1+2+…+2^lgn=
2^0+2^1+2^2+…+2^lgn=
(2^(lgn+1)-1)/(2-1)=2*2^lgn=

2n.

这里有一种使用平滑度规则的替代方法(Levitin,《算法的设计与分析》,第2版,481-82),它允许将类似这样的递归关系表示为指数

无论是前向替换还是后向替换,都适合这个问题。我发现后向替换在很多情况下更容易理解

[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)