热门问题
时间线
聊天
视角
加法链
来自维基百科,自由的百科全书
Remove ads
在数学中,加法链(英语:Addition chain)是由一组由自然数所组成的序列,该序列以 1 开始,到目标数字 结束,例如:,即为目标数字为 的加法链且序列中的每个数为序列出现过的两数之和。而整个链所需要的加法次数则被称作加法链的长度,通常记为 ,而 的值为数列内所包含的基数数量再减去一[1],以前面的例子来说 。
![]() |
Remove ads
范例
这里有个简单的例子: 就是一个目标数字 为 31 且 的加法链
在加法链求幂的方法中就有使用到加法链的方法,而这个方法允许我们将目标数字 设定为某任意数 的指数,进而计算出该数的幂;举例来说,我们现有一数 ,则我们可以将加法链的目标数字 设定为 ,进而计算出其对应的加法链。更具体的说,假设我们现需要计算一自然数 的幂,则可以扩展成求目标数字 为 的加法链的问题。就结果来说,总共就只需要计算七次乘法即可求出其幂,相较于不断的连乘 所需的 次乘法以及平方求幂的 8 次乘法所需要的乘法次数要少:
Remove ads
计算加法链的方法
计算最小长度的加法链并非一件易事,我们可以将这个问题拓扑成:找到一组由一系列自然数所组成的序数,但很不幸地,这个问题是 NP完备[2]。目前已知的算法仅能在某些场合下以合理的时间或较小的记忆体使用量针对给定目标数字 计算相对较短的链,但计算出来链并不一定是最短的加法链[3]。
一种广为人知的计算相对较短加法链的算法是二进制方法,类似于平方求幂。在这种方法中,目标数字 的加法链是由以下方式计算出来的:
- Step1. 先将目标数字 转换至二进制
- Step2. 初始化加法链,其 且
- Step3. 从左至右依序读取位数,若为 则 ,否则
- Step4.
- Step5. 将 从结果中去除
以下使用二进制方法计算目标数字为 26 的加法链范例:
- 先将目标数字 以二进制表示
- 初始化
开始从左而右读取位数
至此我们得到了一序列为 。最后,去除 之后,我们就可得出目标数字为 以二进制方法所产生的加法链为 。
我们同样可以使用被称作因数法的方法来尝试寻找最短加法链,其底层逻辑是目标数字 的质因数分解。如果 有一个质因数,则可以先找到目标数字为 的加法链,接着与一个目标数字 的加法链串接,同时透过将序列内每个元素乘以 来重构该加法链,最终得到目标数字 的加法链。
而因数法和二进制方法可以结合成 Brauer 的 m 进位方法,其方法是透过随机选择一自然数 (无论是否能整除 ),先计算目标数字 的加法链,接着计算目标数字 的加法链,最后将两加法链串接起来获得目标数字为 的加法链,最后加上余数来得到最终的结果。
正因为有新方法持续不断的被提出,而成就了一系列被称为滑动窗口方法的算法[3]。
Remove ads
加法链的长度
令 为目标数字 的最小长度 ,则:
可以在为目标数字 的加法链末尾加入一个新的值 ,从而将目标数字 的加法链转换为目标数字 的加法链,从而得到不等式 ,然而目标数字 和目标数字 的加法链长度并非总是符合前述的不等式,在某些情况下,目标数字 是有可能可以透过某些方法获得更短的加法链。如 Knuth 就观察到 [5]。甚至可能出现目标数字 的加法链比目标数字 的加法链更短的状况;目前已被找到符合 且最小的 发生在 时[6],随后是 、……(OEIS数列A230528)。
Remove ads
Brauer 链
Brauer 链也是一种加法链。Brauer数是指对于该目标数字而言,Brauer链产生出来的加法链是最短的[5]。
Brauer 证明了 :
其中 表示目标数字 加法炼的最短长度[7]。
当 时,等式成立[8]。但 Hansen 表示,有些 的值使得 ,例如 ,其中 。 的最小值是 。
Remove ads
Scholz 猜想
Scholz 猜想(也被称为 Scholz–Brauer 或 Brauer–Scholz 猜想),以 Arnold Scholz 和 Alfred T. Brauer 的名子命名,是一个来自 1937 年的猜想,其猜想如下:
这个不等式对所有已知的 Hansen 数成立,Hansen 数是 Brauer 数的一种广义定义;Neill Clift 曾使用计算机检查了所有 的 Hansen数( 不是 Hansen 数)[6]。Neill Clift 也进一步验证了当 时,[5]。
Remove ads
查看更多
- Addition-subtraction chain
- Vectorial addition chain
- Lucas chain
参考文献
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads