python中整数比较的时间复杂度

时间:2017-05-19 04:55:10

标签: python python-2.7 time-complexity

对于非常大的整数,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"

1 个答案:

答案 0 :(得分:6)

没有一个简单的答案,但答案显而易见; - )

也就是说,如果两个整数实际上是相等的,那么在不比较所有位的情况下知道是不可能的。因此,在相等的情况下,所需的时间与位数成比例(如果log(abs(N))是其中一个比较,则与N成比例。)

如果它们实际上不相等,则有几种情况,都与实施内部相关。长整数被存储为"数字"的向量。在2的幂基础上。如果向量不具有相同的长度,则整数不等于 需要恒定的时间。

但是如果他们确实有相同的长度,那么"数字"必须进行比较,直到找到第一个(如果有的话)不匹配对。这需要时间与需要比较的位数成比例。

然后使上述所有内容复杂化以解释可能的符号混合。