n个1位数的加法算法

时间:2014-10-21 12:34:16

标签: java algorithm data-structures

假设添加两个带ab位的数字可以在O(max {a,b})中完成。我们想要添加n个数字(n个1位数字,即添加n的0或1)。这种算法的成本从输入排列到另一种排列是不同的。这个算法的最佳和最差情况是什么?

我在计算机课程上遇到了这个老问题。

我们有两个解决方案:

1-最佳案例和最坏情况可以在O(n)

2- O(n)中的最佳和O(n lg n)中的Wost案例

任何人都可以描述上述两个时间顺序的任何伪问题或算法?

1 个答案:

答案 0 :(得分:0)

答案是1-最好和最坏的情况是O(n)。 最好的情况是,当所有位都为0时,所需的顺序为n - 1或简单地放入O(n)。 最坏的情况是,当所有位都是1时,实际的顺序是n *(lg n - lg i)/ 2 ^(lg n - lg i)之和 i从n到0.当我趋向于0时,结果表达式值将很小,因此可以忽略。所以表达式就像n / 2 + n / 4 * 2 + ....再次与n的线性增长。
增加更多细节:
最好的情况是,当所有位都为0时,添加它们将永远不会导致不超过1位。 (即它总是给出0)。因此订单是O(n)
最坏的情况是,当所有位都为1时,添加前2位将需要O(1)结果将为10.现在将其与另一位相加将需要O(2),并且这种方式可以在最坏情况下增加。假设我们将输入集分成2个数字对并添加它们,在第一次迭代中,所有对都需要O(1)并且将导致10.有n / 2对所以它是O(n / 2)。在第二次迭代中,我们将第一个迭代结果集拆分为2个数字对并添加它们。 (注意现在所有的n都是10)所以顺序是n / 4 * O(2)。 O,(n / 2)。以这种方式,它将继续进行直到结果集耗尽。但是当n的值非常大时,可以忽略3次迭代的贡献。所以它只是O(n / 2)+ O(n / 2),即O(n)