Lazy loaded image
算法设计与分析-习题5.4
Words 1050Read Time 3 min
2026-2-27
2026-2-27
type
Post
status
Published
date
Feb 27, 2026
slug
summary
tags
算法笔记
category
笔记
icon
password

1.两个十进制n位数的积的位数范围

答案:积最少有 2n−1位,最多有 2n位。
解题思路
1.十进制n位数的最小值是 ,最大值是
  1. 最少位数与最多位数:
    1. 两个数都取最小值。其中 是2n-1位数。(通过 有1位, 有3位可知, 包含n+1位数)。
    2. 两个数都取最大值。其中 ,故最多有2n位数(A介于2n位数和2n+1位数之间,且是拥有2n+1位数的十进制数的最小值,所以A最多有2n位数)。

2.用分治算法计算 2101×1130

答案:
案例:计算两个 4 位数的乘积n=4
notion image

3.a.证明等式

解题思路:利用对数换底公式和指数法则进行变形。设等式左边为 ,右边为 。对两边取自然对数(或以任意底的对数),将不同底的对数转化为同一底,再比较即可。
notion image

3.b.为什么更适合作为M(n)的闭合公式?

解题思路:由a知道他们二者是数学等价的,但是作为算法复杂度的闭合公式,两者表达形式的直观性和标准习惯不同。
原因分析:
原因分析.jpg

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

答案:因为在计算机中,乘以 实际上是通过左移十进制位(或二进制位)来实现的,这只需要 O(n)的加法/移位操作,而不需要真正的乘法运算。在分析大整数乘法算法(如 Karatsuba 算法)时,M(n)通常只统计非平凡的乘法(即两个非零数字块的相乘),而将乘以 10n的位移操作视为加法开销的一部分,归入递归式中的线性项 O(n)。

4.b 建立 M(n)递推关系时,另一个“微妙但不影响最终答案”的假设是什么?

答案:这个假设是:将 n 位数拆分为两个 位数时,我们默认这两个部分的位数严格相等(即各占 n/2位)。但实际上,当 n 为奇数时,拆分后的两部分位数可能分别为 ,并不严格相等。

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

答案:
  1. 精确公式:需要 次一位数加法(忽略进位操作本身)。
  1. 渐进复杂度:加法次数为 O()。
分析:
notion image

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

代入验证可知二者相等,公式正确。具体展开过程略。

7.应用Strassen算法计算两个 4×4矩阵的乘积

给定矩阵:
x
解析:根据提示,当 n=2时停止递归,即使用蛮力法(传统矩阵乘法)计算 2×2子矩阵的乘积。
将 A和 B划分为 2×2分块矩阵:
其中:
分块矩阵划分
  1. 计算矩阵加减法
矩阵加减法
  1. 计算
notion image
  1. 计算结果矩阵 C的四个子块:
notion image
  1. 合并子块得到最终结果:
notion image
  1. 因此,矩阵乘积 A×B为:
notion image

8. 对于Strassen算法,其加法次数(包括减法)的递推关系式求解

notion image
 
上一篇
价值投资
下一篇
从 Heo 到 Heo Pro