例如,如果我使用4个磁盘,则该问题应根据方程分3步解决。不过,我的要走9步为什么会这样?
考虑一下这里的代码

include <stdio.h>
void towerOfHanoi(int n, char from_rod, char to_rod,
                  char aux_rod1, char aux_rod2)
{
if (n == 0)
    return;
if (n == 1) {
    printf("\n Move disk %d from rod %c to rod %c",
                        n, from_rod, to_rod);
    return;
}

towerOfHanoi(n - 2, from_rod, aux_rod1, aux_rod2,
                                        to_rod);
printf("\n Move disk %d from rod %c to rod %c ",
                   n - 1, from_rod, aux_rod2);
printf("\n Move disk %d from rod %c to rod %c ",
                      n, from_rod, to_rod);
printf("\n Move disk %d from rod %c to rod %c ",
                   n - 1, aux_rod2, to_rod);
towerOfHanoi(n - 2, aux_rod1, to_rod, from_rod,
                                    aux_rod2);
}

// driver program
int main()
{
    int n = 4; // Number of disks

    // A, B, C and D are names of rods
towerOfHanoi(n, 'A', 'D', 'B', 'C');
return 0;
}

最佳答案

当你有4个钉,时间复杂度移动1个PEG将需要1的比较。
移动2个PEG的时间复杂度需要3个比较。
时间复杂度=2×t(n-2)+3,n>=3
用代换法求解。
t(n)=2*t(n-2)+3,n>=3
=2^2T(n-4)+2*3+3=2^3T(n-6)+2^2*3+2*3+3等等。
对于第k次替换,
=2^(k/2)*T(n-k)+2^(k/2-1)*3++2^2*3+2*3+3----方程(1)
取n-k=2=>k=n-2
所以方程(1)变成
=2^(n/2-1)*3+2^(n/2-2).3+…+2^2*3+2*3+3
=3{1.(2^(n/2)-1)}
=θ(2^(n/2))

关于algorithm - 为什么4钉汉诺塔的时间复杂度为0(2 ^ n/2)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49623663/

10-13 08:35