algorithm - 无进位加法的复杂性

标签 algorithm math number-systems

两个二进制数可以用通常的“常规、冗余”表示法表示(即引入另一个数字,比如 2,以获得非唯一表示法,使得任何两个连续的 2 之间都有一个零),因此加法变得无携带。我听说复杂度是 O(k),其中 k 是两个数字中较短的那个的长度。但是算法本身是什么?它似乎没有出现在网络上的任何地方。我知道你可以在常数时间内将 1 添加到这样的表示中,以便结果保持规律性。但我不知道如何概括这一点。

最佳答案

我看到这是一篇旧帖子,发帖人最近在这里没有太多事件,但我想我还是会提出答案。

为了将此电路表示为传统方程式,让我们提出一些符号。 RBR 表示法中的每个“位”实际上由两个位组成,因此为了指代这些右位和左位,我将分别使用 [0] 和 [1]。为了引用某个“位”位置,我将使用大括号 {0}、{1}、{2}、...{n}。

两个或三个单个位的相加可以产生两位和(MSB 传统上称为进位位)。这些也可以由 [0] 和 [1] 引用,后者是进位位。例如:
(0+1+1)[0]=0, (0+1+1)[1]=1, (0+0+1)[0]=1, ( 0+0+1)[1]=0

现在不用多说了,加数 z = x + y 的一般算法由下式给出:
z{n}[0] = ((x{n-1}[1] + x{n-1}[0] + y{n-1}[1])[0] + (y{n-1 }[0]) + (x{n-2}[1] + x{n-2}[0] + y{n-2}[1])[1])[1]

z{n}[1] = ((x{n}[1] + x{n}[0] + y{n}[1])[0] + (y{n}[ 0]) + (x{n-1}[1] + x{n-1}[0] + y{n-1}[1])[1])[0]

您会注意到这里进行了一些进位,但该算法实现了 O(n),因为进位仅限于两个阶数。还要注意 z{0} 和 z{1} 的特殊注意事项,它们在上述链接的电路图中定义。

关于algorithm - 无进位加法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999973/

相关文章:

java - 如何求余数?

algorithm - 公差标准 Brent 方法

python - 在球面上均匀分布n个点

python - Python中有没有办法计算多条曲线之间的重叠面积?

javascript - 使用 Javascript 以印度格式显示数字

c++ - 如何在 C++ 中从十六进制切换到 2^16 系统

algorithm - 整数二分查找的极致优化

c++ - 向大数组减去或添加常量

sql - 在 MS SQL 中计算百分位排名