维基百科将加法的时间复杂度列为,其中是位数。
这是严格的理论下限吗?还是这仅仅是当前最快的已知算法的复杂性。我想知道,因为加法的复杂性强调了所有其他算术运算和使用它们的所有算法。
从理论上讲不可能获得在中运行的加法算法?还是我们必须将线性复杂度相加。
维基百科将加法的时间复杂度列为,其中是位数。
这是严格的理论下限吗?还是这仅仅是当前最快的已知算法的复杂性。我想知道,因为加法的复杂性强调了所有其他算术运算和使用它们的所有算法。
从理论上讲不可能获得在中运行的加法算法?还是我们必须将线性复杂度相加。
Answers:
如果您的算法渐近使用的时间少于次,则它没有足够的时间来读取它所添加的数字的所有数字。您会想象您正在处理非常大的数字(例如存储在8MB的文本文件中)。当然,与数字的值相比,加法可以非常快速地完成;如果N是总和的值,它将以O(log (N ))时间运行。
这并不意味着您可以加快速度。如果处理器每个操作处理32位,则使用次,但这仍然是O(n)而不是o(n)。
为了使复杂度分析完全没有任何形式上的意义,您必须指定一个正式的计算模型,在该模型中执行对象中的算法,或者至少指定一个成本模型,该模型指定什么是基本操作,以及他们的费用。
在大多数情况下,假定算术运算需要时间。这通常是合理的,因为我们对算法复杂性感兴趣,而与涉及的数量无关。这称为统一成本模型。
如果数字可以无限增长,或者我们有兴趣分析这些运算本身,则算术运算的成本与输入的大小成比例。
现在,运营成本可以低于吗?但是,可能必须正式定义一个可以在其中发生的计算模型。
加法的输入是两个任意数字。由于它们是任意的,因此您必须读取每个位,因此算法为。
想象一下,您的算法成功地添加了1010100110和0010010110而不读取每个位。为了使您的算法能够添加任意输入,我应该能够随机翻转这些位中的任意一位,并且该算法仍会输出正确(但不同)的加法。但是,如果您的算法没有读完每一位,那么如何判断翻转后的输入与原始输入有什么不同呢?