两个二进制数可以用通常的“常规,冗余”表示来表示(即引入另一个数字,比如2,以获得非唯一的表示,使得任何两个连续的2都具有零),以便添加变得随身携带。我听说复杂度是O(k),其中k是两个数字中较短者的长度。但算法本身是什么?它似乎没有出现在任何地方的网络上。我知道你可以在恒定时间内为这样的表示添加1,以便结果保持规律性。但我不知道如何概括这一点。
答案 0 :(得分:0)
我觉得这是一篇很老的帖子,这张海报最近没有太多的活动,但我想我还是提出了答案。正如xan指出的,添加"算法"在this article中的电路图中显示。
为了将该电路表示为传统方程,让我们给出一些符号。每个''在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}的特殊注意事项,这些注意事项在上述链接的电路图中定义。