求和布尔值的复杂性是否不同于求和整数?
Does the complexity of summing booleans differ from summing integers?
我正在对固定数字 k
布尔值求和:A = a_1 + a_2 + ... + a_k
。 (或等效地计算逻辑的)
这是否具有与 k
任意 8、16、32、64 位整数或双精度求和相同的计算复杂度:B = b_1 + b_2 + ... + b_k
?
如果是,请说明原因。
如果不是,求和的适当复杂度是多少A
?
如果您将 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 的数量好多少在布尔情况下。但是,如果您处理的是任意精度的数字,布尔求和绝对更有效。
我正在对固定数字 k
布尔值求和:A = a_1 + a_2 + ... + a_k
。 (或等效地计算逻辑的)
这是否具有与 k
任意 8、16、32、64 位整数或双精度求和相同的计算复杂度:B = b_1 + b_2 + ... + b_k
?
如果是,请说明原因。
如果不是,求和的适当复杂度是多少A
?
如果您将 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 的数量好多少在布尔情况下。但是,如果您处理的是任意精度的数字,布尔求和绝对更有效。