对于非常大的整数,Python中整数比较的时间复杂度是多少?例如,如果我们使用2个函数计算1000的阶乘,那么检查相等性,是O(1)?
def fact(n):
prod = 1
for i in range(n):
prod = prod * (i + 1)
return prod
i = fact(1000)
j = fact(1000)
# Complexity of this check?
if i == j:
print "Equal"
答案 0 :(得分:6)
没有一个简单的答案,但答案显而易见; - )
也就是说,如果两个整数实际上是相等的,那么在不比较所有位的情况下知道是不可能的。因此,在相等的情况下,所需的时间与位数成比例(如果log(abs(N))
是其中一个比较,则与N
成比例。)
如果它们实际上不相等,则有几种情况,都与实施内部相关。长整数被存储为"数字"的向量。在2的幂基础上。如果向量不具有相同的长度,则整数不等于 需要恒定的时间。
但是如果他们确实有相同的长度,那么"数字"必须进行比较,直到找到第一个(如果有的话)不匹配对。这需要时间与需要比较的位数成比例。
然后使上述所有内容复杂化以解释可能的符号混合。