算法设计与分析-习题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 小时前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu3 小时前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
故事和你913 小时前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6483 小时前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
kvo7f2JTy4 小时前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
List<String> error_P4 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
迈巴赫车主5 小时前
蓝桥杯3500阶乘求和java
java·开发语言·数据结构·职场和发展·蓝桥杯
流云鹤5 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
wljy15 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
高一要励志成为佬6 小时前
【数据结构】算法复杂度
数据结构