算法设计与分析-习题5.4

目录

1.两个十进制n位数的积最少能拥有多少位数?最多呢?

2.用课文中介绍的分治算法来计算2101×1130。

3.

[a.请证明等式​编辑 5.4节使用了这个等式。](#a.请证明等式编辑 5.4节使用了这个等式。)

[b. 作为M(n)的闭合公式来说, 为什么要比好?](#b. 作为M(n)的闭合公式来说, 为什么要比好?)

4.

a.在大整数乘法算法的乘法次数M(n)中,为什么不把乘以10^n时所做的乘法包括进去?

b.为了简单起见,我们假设n是2的乘方,其实,在建立M(n)的递推关系时,我们做出了另一个微妙的假设,它并不总是成立的(然而,它并不会改变最后的答案)。你能指出这个假设吗?

5.在用笔算算法计算两个n位数乘法时,需要做多少次一位数的加法?可以忽略进位导致的加法。

[6.验证 Strassen算法在计算2×2矩阵的乘法时所用到的公式。](#6.验证 Strassen算法在计算2×2矩阵的乘法时所用到的公式。)

[7. 应用 Strassen算法来计算](#7. 应用 Strassen算法来计算)

[8.对 Strassen算法用到的加法次数的递推关系式求解。假设n是2的乘方。](#8.对 Strassen算法用到的加法次数的递推关系式求解。假设n是2的乘方。)

[9.潘(V. Pan)发明了一种矩阵乘法的分治算法(Pan78),它的理论根据是两个 70 阶的矩阵相乘需要143640 次乘法运算。求潘的算法的渐近效率(可以忽略加法)并将它和 Strassen算法进行比较。](#9.潘(V. Pan)发明了一种矩阵乘法的分治算法([Pan78]),它的理论根据是两个 70 阶的矩阵相乘需要143640 次乘法运算。求潘的算法的渐近效率(可以忽略加法)并将它和 Strassen算法进行比较。)


1.两个十进制n位数的积最少能拥有多少位数?最多呢?

最小 n 位数:

最大的n位数:

因此最小的的积是,2n-1位数

最大的积是,2n位数

2.用课文中介绍的分治算法来计算2101×1130。

分治公式:

将2101分为21、01,1130分为11、30

其中又对于21*11有

其余式子同理

最终有原式

其中01*30=30,21*11=231,21*30=630

3.

a.请证明等式 5.4节使用了这个等式。

对两边取log_b,有

b. 作为M(n)的闭合公式来说, 为什么要比好?

log_2 3 ≈1.58,处于n^1和n^2,而后者是指数与对数混合形式,形式混乱,不适合作为闭合公式

4.

a.在大整数乘法算法的乘法次数M(n)中,为什么不把乘以10^n时所做的乘法包括进去?

因为乘以 10ᵏ (10 的整数次幂)在二进制 / 十进制表示中只是移位操作只需要把数字左移、后面补 0不涉及真正的乘法运算,所以不计入乘法次数 M(n)。

b.为了简单起见,我们假设n是2的乘方,其实,在建立M(n)的递推关系时,我们做出了另一个微妙的假设,它并不总是成立的(然而,它并不会改变最后的答案)。你能指出这个假设吗?

大整数递推式为:M(n)=3M(n/2),默认了:把 n 位数拆成两个 n/2 位数后,得到的数仍然是 n/2 位

实际并不一定成立

  • 比如 1000 拆成 10 和 00,后者只有 1 位,不是 2 位
  • 高位可能为 0,导致子问题的实际位数 < n/2

但最终结果上来看

  • 位数变少 → 乘法次数只会更少
  • 最坏情况仍然是 每边都是满 n/2 位
  • 所以渐近复杂度 仍然是 Θ(n^{log₂3})

5.在用笔算算法计算两个n位数乘法时,需要做多少次一位数的加法?可以忽略进位导致的加法。

  • 用第二个数的每一位去乘第一个数,一共得到n 行中间结果,每行 n 位。

  • 最后要把这 n 行对齐相加

  • 每一列上有 n 个数字 ,把 n 个数加起来,需要 n−1 次一位加法

  • 一共有 n 列

而第一列和最后一列没有加法操作,因此只有(n-1)^2次

6.验证 Strassen算法在计算2×2矩阵的乘法时所用到的公式。

设矩阵为:

其中,

单独验证即可

7. 应用 Strassen算法来计算

当n=2时停止递归,也就是说,是用蛮力法来计算2×2矩阵的积。

结果为:

8.对 Strassen算法用到的加法次数的递推关系式求解。假设n是2的乘方。

递推式:

由分治法主定理:a=7,b=2,c=2,a<b^d,所以

效率为Θ()≈Θ()

9.潘(V. Pan)发明了一种矩阵乘法的分治算法(Pan78),它的理论根据是两个 70 阶的矩阵相乘需要143640 次乘法运算。求潘的算法的渐近效率(可以忽略加法)并将它和 Strassen算法进行比较。

可得公式

其中k=143640,所以M(n) ∈Θ()大约为,效率大于Strassen算法

相关推荐
_清歌2 小时前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 小时前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象2 小时前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局2 小时前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法
统计实现局2 小时前
dqrsl 拆解:拿着 QR 结果能算出哪 5 种东西
算法
统计实现局2 小时前
为什么 Cholesky 求逆比 Gauss-Jordan 快一倍——行列式溢出防护详
算法
To_OC13 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵17 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC19 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode