比特成本的时间复杂性

时间:2012-10-06 21:34:52

标签: algorithm time-complexity

我试图围绕研究算法的概念来研究比特成本(而不是单位成本)的时间复杂度,这似乎是不可能的找到关于这个主题的任何内容。

这是我到目前为止所拥有的:

两个数字与n位的乘法和除法的比特成本是,任意算术,O(n ^ 2)。

所以,例如:

int number = 2;
for(int i = 0; i < n; i++ ){
    number = i*i;
}

具有关于O(log(n)^ 2 * n)的比特成本的时间复杂度,因为它进行n次乘法并且i具有log(i)位。

但在常规情况下,我们希望输入的时间复杂度。那么,这种情况如何运作? i中的位数可以视为常量。这会使时间复杂度与单位成本相同,除非有更大的常数(因此两者都是线性的)。

对于任意精度算术,加法,减法,比较和赋值变量都是O(n),n是位数。

1 个答案:

答案 0 :(得分:4)

使用有限精度算术(例如,在您的示例中最可能是32位int乘法)乘法的位成本是恒定的。使用朴素乘法算法将int乘以O(32^2)的成本为O(1)(为了更好的algos外观here)。这与i相同,因此人们在分析算法时通常会忽略它。

如果我们使用任意精度算法,那么它就变得很重要了。如果将具有值O(log(i))的任意长数字存储在位中,则它将占用O(log(n)^2 * n)位。因此,您的代码段的费用为i(我使用的事实是n不大于n,因为您的循环上升到O(n))。

就加法和减法而言,我会说它们都有n的位成本,其中{{1}}是较小操作数的位数。