Algorithm 具有比特代价的时间复杂度

Algorithm 具有比特代价的时间复杂度,algorithm,time-complexity,Algorithm,Time Complexity,我试图把我的脑袋绕到研究一个算法的时间复杂度的概念上,它是关于比特成本而不是单位成本的,似乎不可能找到任何关于这个主题的东西 以下是我目前掌握的情况: 使用任意算术,两个数的n位乘法和除法的位代价为^2 例如: int number = 2; for(int i = 0; i < n; i++ ){ number = i*i; } 就Ologn^2*n的位开销而言,它具有时间复杂性,因为它不进行n次乘法,而我有logi位 但在常规场景中,我们需要输入的时间复杂性。那么,这个场景是

我试图把我的脑袋绕到研究一个算法的时间复杂度的概念上,它是关于比特成本而不是单位成本的,似乎不可能找到任何关于这个主题的东西

以下是我目前掌握的情况:

使用任意算术,两个数的n位乘法和除法的位代价为^2

例如:

int number = 2;
for(int i = 0; i < n; i++ ){
    number = i*i;
}
就Ologn^2*n的位开销而言,它具有时间复杂性,因为它不进行n次乘法,而我有logi位

但在常规场景中,我们需要输入的时间复杂性。那么,这个场景是如何工作的呢?i中的位数可以看作是一个常数。这将使时间复杂度与单位成本相同,只是有一个更大的常数,因此两者都是线性的


对于任意精度的算术,加法、减法、比较和赋值变量都是打开的,n是位数。

对于有限精度的算术,如示例中最可能的32位整数乘法,乘法的位成本是恒定的。使用简单的乘法算法将两个int相乘的代价是O32^2,以获得更好的算法外观。这与O1相同,因此人们在分析算法时通常忽略了它

然而,如果我们使用任意精度的算法,那么它就变得很重要。如果一个值为i的任意长的数字存储在位中,它将占用ogi位。所以你的代码片段的代价是Ologn^2*n我使用的是这样一个事实,即所有的I都不大于n,因为你的循环增加到n


就加法和减法而言,我想说它们都有一个On的位代价,其中n是较小操作数的位数。

对于有限精度的算术,如示例中最可能的32位整数乘法,乘法的位代价是恒定的。使用简单的乘法算法将两个int相乘的代价是O32^2,以获得更好的算法外观。这与O1相同,因此人们在分析算法时通常忽略了它

然而,如果我们使用任意精度的算法,那么它就变得很重要。如果一个值为i的任意长的数字存储在位中,它将占用ogi位。所以你的代码片段的代价是Ologn^2*n我使用的是这样一个事实,即所有的I都不大于n,因为你的循环增加到n


至于加法和减法,我想说它们都有On的位代价,其中n是较小操作数的位数。

感谢您的回答,这是非常有用的。关于输入和比特成本的时间复杂度,你有什么想法吗?我同意你关于输入场景的时间复杂度的分析。如果我们假设比特数是常数,那么我们最终得到的运行时与一个更大的常数是线性的,就像您所写的。渐近地,较大的常数并不重要,所以运行时相对于输入保持线性。感谢您的回答,这是非常有用的。关于输入和比特成本的时间复杂度,你有什么想法吗?我同意你关于输入场景的时间复杂度的分析。如果我们假设比特数是常数,那么我们最终得到的运行时与一个更大的常数是线性的,就像您所写的。渐近地,较大的常数无关紧要,所以运行时相对于输入保持线性。