Algorithm 为什么4个木桩的河内塔的时间复杂度为0(2^n/2)?

Algorithm 为什么4个木桩的河内塔的时间复杂度为0(2^n/2)?,algorithm,data-structures,time-complexity,recursive-datastructures,Algorithm,Data Structures,Time Complexity,Recursive Datastructures,例如,如果我使用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

例如,如果我使用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;
}
包括
河内空塔(内部n,从燃料棒到燃料棒,
char aux_rod1,char aux_rod2)
{
如果(n==0)
返回;
如果(n==1){
printf(“\n将磁盘%d从棒%c移动到棒%c”,
n、 从_杆到_杆);
返回;
}
河内塔楼(n-2,从控制杆、辅助控制杆1、辅助控制杆2、,
至(U杆);
printf(“\n将磁盘%d从棒%c移动到棒%c”,
n-1,从_杆,辅助_杆2);
printf(“\n将磁盘%d从棒%c移动到棒%c”,
n、 从_杆到_杆);
printf(“\n将磁盘%d从棒%c移动到棒%c”,
n-1,辅助杆2,至辅助杆);
河内塔楼(n-2,辅助杆1,至杆,从杆,
辅助装置(2);
}
//驱动程序
int main()
{
int n=4;//磁盘数
//A、B、C和D是棒的名称
河内塔楼(n,‘A’、‘D’、‘B’、‘C’);
返回0;
}

当您有4个peg时,移动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 所以eqn_u1变为 =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))

复杂度O(2^n/2)并不意味着算法只执行2^n/2步。也许你需要阅读这样的内容:复杂性是(2^N)/2,而不是2^(N/2)。所以4张碟片,结果是8张。。。对我来说接近9,根据什么方程式?最重要的是,如果移动少于磁盘,则无法解决问题。你没有给出你所使用的等式,仅仅是复杂度。另外,请注意,对于4个销钉上的4个磁盘,9次移动是理论上的最小值。此时您没有编程问题。