算法导论第四章思考题参考答案(7)

Problem 4-1 

  

通过主定理。

  g. 让d = m取2的模,我们很容易看出T(n)的精确值是

 它的第一项是 n^3 / 6,所以T(n) ∈ Θ(n^3)。

 Problem 4-2

 

a.描述出递归式 并 解递归式

 b.

 Problem 4-3

a.主定理,T(n) ∈ Θ(n ^ log3(4))。

b.先用代换法来证明,T(n) ≤ n lg(n)。

 现在,我们证明

 表明这是 \leq cn^{1-\epsilon }等于表明

 因为这个不等式成立。因此,我们有n的函数是软θ,见3 - 5题

c.主定理,T(n) ∈ Θ(n ^ 2.5)。

d.Θ(nlg (n))。在T的参数内发生的减法不会改变解的渐近性,也就是说,对于较大的n,除法比减法的变化要大得多,它是唯一重要的部分。一旦我们去掉这个减法,解就会由主定理得到。

e.通过与第2部分相同的推理,函数是对每一个\epsilon,所以是软的Θ(n),见问题3-5。

f.我们将通过替换来证明这是O(n)。我们想让k < n时T(k)≤c*k,那么,

所以≤cn,只要当c≥8时发生。

g.回想一下,χA表示A的指示函数,那么,我们看到和是

然而,由于1/x是单调递减的,对于每个i∈Z,我们都有

所以,T(n)的表达式变成

我们处理误差项的方法是先去掉1和2之间的常数然后将误差项限定为O(\frac{1}{x(x-1)}),其不定积分(通过部分分式法)为O(\frac{1}{n})。所以,

这就得到了T(n)∈Θ(lg(n))的最终答案。

我们清楚地看到我们有

与上面类似,我们将这个和与lg(x)的积分联系起来,
所以,
i.参照前两部分使用的方法,我们将得到 T(n) \in \Theta (li(n))=\Theta (\frac{n}{lgn})
j.设i是最小的i,使得 n^{\frac{1}{2^{i}}}< 2。回想之前的问题(3-6.e),这是lg(lg(n))。展开递归式,我们得到它是
 Problem 4-4

a.当i≥2时,F0 = 0, F1 = 1, Fi = Fi−1 + Fi−2。然后我们有

b.利用(a)部分给出的方程得到F(z)zF(z)z^2 *F(z) = z,因式除法得到 

用二次式对分母因式分解得到1-z-z^{2}=(1-\phi z)(1-\widetilde{\phi } z),由部分分式分解得到最终等式。

c.从(b)部分和我们对几何级数的知识

d.由生成函数的定义可知,Fi是F(z)中z^{i}的系数。由(c)部分给出,因为,我们必须有。最后,由于斐波那契数是整数,我们看到精确解一定是近似解 \frac{\phi ^{i}}{\sqrt{5}}四舍五入到最接近的整数。 

Problem 4-5 

a.对于坏芯片的策略是,总是说其他坏芯片是好的,其他好芯片是坏的。这反映了优秀芯片使用的策略,因此,这是不可能区分的。

b.任意配对芯片。只看两个芯片都认为对方不错的那一对。因为我们至少有一半的芯片是好的,所以我们知道至少有一对这样的芯片声称另一对是好的。我们也知道,至少有一半声称两者都是好的,实际上是好的。然后,从每一对中任意挑选一个芯片,让这些芯片构成问题的子实例。

c.一旦我们确定了一个好的芯片,我们就可以用它来查询其他的芯片。从之前的递归测试中找到一个好的芯片的次数是T(n) \leq T(n/2) + n/2

根据主定理,解为Θ(n)。所以,这个问题可以用O(n)个成对检验来解决。因为我们也必须要看至少一半的芯片,我们知道问题也是Ω(n)。

 Problem 4-6

 

a.如果一个数组a是Monge,取k = i + 1, l = j + 1,那么它必须满足不等式。

现在假设A[i, j] + A[i + 1, j + 1]≤A[i, j + 1] + A[i + 1, j]。我们将对行和列使用归纳法来显示数组是Monge。每个基本情况都包含在给定的不等式中。

现在固定i和j,令r≥1,并设A[i, j]+A[i+1, j+r]≤A[i, j+r]+A[i+1, j]。通过运用归纳假设和已知不等式,我们得到

因此,我们可以扩展列并保持Monge性质。

接下来我们对行进行归纳。设 A[i, j] + A[k, l] ≤ A[i, l] + A[k, j]。
然后我们有

b.将7改为5。

c. 假设存在i和k,使得i < k但f(i) > f(k)。由于A是Monge,我们必须有A[i, f(k)] + A[k, f(i)]≤A[k,     f(k)] + A[i, f(i)]。由于f(i)给出了第i行中最左边最小元素的位置,这意味着A[i, f(k)] > A[i,     f(i)]。而且,A[k,f(k)] ≤ A[k, f(i)]。将它们与Monge不等式结合起来得到A[i, f(i)]+A[k, f(i)]     < A[k, f(i)]+A[i, f(i)],这是不可能的,因为两边是相等的。因此,不存在这样的i和k。

d.线性扫描第1行索引1到f(2),查找第1行的最小元素并记录为f(1)。接下来线性扫描第3行的     索引f(2)到f(4),查找第3行的最小元素。一般来说,我们只需要扫描第2k + 1行的下标f(2k)     到f(2k + 2)就能找到第2k + 1行的最左边的最小元素。如果m是奇数,我们需要搜索索引         f(m−1)到n来找到第m行中最左边的最小值。通过(c)部分,我们知道最左边最小值元素的索     引是递增的,所以我们保证从扫描的索引中找到所需的最小值。第j列的一个元素将被扫描     Nj + 1次,其中Nj是i的个数,使得f(i) = j。由于\sum_{j=1}^{n}N_{j}=n,比较的总数为m + n,     运行时间为O(m + n)。

e.设T(m, n)表示应用于m × n矩阵的算法的运行时间。对于某个常数cT(m, n) = T(m/2, n) + c(m + n),我们会证明T(m, n)≤c(m + n * log m) - 2cm。

通过归纳,我们得到T(m, n) = O(m + n * log m) 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值