我总结了固定数量k
布尔值:A = a_1 + a_2 + ... + a_k
。 (或等效地计算逻辑的)
这是否与求k
任意8,16,32,64位整数或双精度具有相同的计算复杂度:B = b_1 + b_2 + ... + b_k
?
如果是,请解释原因。
如果不是,sum A
的适当复杂性是什么?
答案 0 :(得分:0)
如果您要添加 k 布尔值(0/1)值,那么您基本上只计算有多少1个值。这可以在时间O(k)中完成,只需扫描数字并向上计数每1个读数。
现在,假设您正在添加 k b位值。这将需要 k 添加,但每次添加将花费与您总结的数字中的位数成比例的时间。想象一下,您将总T添加到列表x中的某个数字。由于x是b位长,你将花费O(b)工作将这些位添加到总T中。然后你可能需要在T的一些位上进行纹波传输。因为每个位代表下一个位在两个中,你越来越不可能翻转那些更高的位,所以总的来说,完成的工作可以达到O(kb)。请注意,对于大b,这是渐渐慢于O(k)。
现在,大多数机器可以在时间O(1)上对某些固定大小w的单词执行算术运算。因此,如果在实际机器上进行算术运算,那么真正的运行时间将为O(kb / w),因此如果您选择与计算机的字大小相匹配的位数,则渐近没有比计数更好的布尔情况下的1的数量。但是,如果您处理任意精度数字,那么求加布尔值肯定会更有效率。