这种特定方法的时间复杂度是多少?

时间:2015-11-16 14:20:37

标签: java time-complexity

class Tower {
      public void moveDisks(int n, Tower Destination, Tower Buffer) {
         if (n > 0) {
            moveDisks(n-1, Buffer, Destination);
            moveTopto(Destination);
            Buffer.moveDisks(n-1, Destination, this);
        }
    }
}

以下是我上面提到的方法的代码。这是解决经典河内塔问题的算法的一部分。由于它有相当多的递归,我只能无法解决时间复杂问题。

这是班级Tower内的一种方法。 moveToptoO(1),因此不应影响运行时。

2 个答案:

答案 0 :(得分:2)

这取决于moveToptobuffer.moveTopto的时间复杂度。

基本上要计算复杂性,您需要增加时间。 n的时间将是n-1的时间加上moveTopto的时间加上buffer.moveTopto的时间加上常量。现在您看到它至少会有O(N),但可能会更高,特别是如果buffer.moveTopto具有非恒定的时间复杂度。

如果您的意思是Buffer.moveTopto,那么n-1的时间大约是时间的两倍,那就是t(n) = 2*t(n-1)+constant。这给了O(2^n)

答案 1 :(得分:1)

递归算法复杂性分析的良好解释 Video Tutorial

PS。如果你懒得打开链接并理解并且只想要答案 - 复杂性~O(2 ^ n)