【发布时间】:2012-09-01 09:24:21
【问题描述】:
我有以下 robert sedwick 在 C++ 算法中的程序
Item max(Item a[], int l, int r){
if (l == r) return a[l];
int m = (l+r)/2;
Item u = max(a, l, m);
Item v = max(a, m+1, r);
if (u > v)
return u;
else
return v;
}
以下是河内塔的程序
void hanoi(int N, int d)
{
if (N == 0) return;
hanoi(N-1, -d);
shift(N, d);
hanoi(N-1, -d);
}
以下是标尺程序
void rule(int l, int r, int h)
{ int m = (l+r)/2;
if (h > 0)
{
rule(l, m, h-1);
mark(m, h);
rule(m, r, h-1);
}
}
以上三个问题都通过将大小为 2 的 n 次方的问题分成两个大小为 2 的 n-1 次方的问题来解决大小为 2 的 n 次方问题。
我理解标尺和最大值,但上述语句中的towerof hanoi如何?
在分析上述程序时,作者提到为了找到最大值,我们在输入的大小上有线性时间解;对于绘制标尺和求解塔,我们有输出大小的线性时间解。
作者所说的上述输出大小的线性时间解是什么意思?
【问题讨论】:
-
'输出大小的线性时间解'只是意味着 O(n) 中的 n 是输出中的项目数而不是输入。在这种情况下,需要绘制的标记数才能获得所需尺寸的标尺。