算法设计与分析-习题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算法

相关推荐
七夜zippoe2 小时前
Redis高级数据结构实战:从Stream到HyperLogLog的深度解析
数据结构·数据库·redis·python·缓冲
IronMurphy2 小时前
【算法二十四】101. 对称二叉树 543. 二叉树的直径
数据结构·算法·leetcode
qingy_20462 小时前
Java基础:数据类型
java·开发语言·算法
小璐资源网2 小时前
排序算法概览:十大排序算法一览
数据结构·算法·排序算法
Allen_LVyingbo2 小时前
PostgreSQL动态分区裁剪技术:查询性能优化解析(2026年版)
数据库·算法·观察者模式·postgresql·性能优化·架构
少许极端2 小时前
算法奇妙屋(三十二)-DFS解决floodfill问题
算法·深度优先·dfs·floodfill
m0_716667072 小时前
嵌入式C++驱动开发
开发语言·c++·算法
Lenyiin2 小时前
《LeetCode 顺序刷题》51 - 60
java·c++·python·算法·leetcode·深度优先·lenyiin
Sakinol#2 小时前
Leetcode Hot 100 —— 图论
算法·leetcode·图论