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

相关推荐
田梓燊几秒前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎24 分钟前
算法札记——4.27
算法
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
数据牧羊人的成长笔记1 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理1 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
Mrlxl.cn4 小时前
计算机网络——网络层
c语言·数据结构·计算机网络·考研
d111111111d4 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜5 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Jiangxl~6 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢6 小时前
wolfram详解山峦算法
前端·算法