python中整数比较的时间复杂度
在Python中,对于非常大的整数,整数比较的时间复杂度是多少?例如,如果我们使用2个函数计算1000的阶乘,然后检查等式,是O(1)吗python中整数比较的时间复杂度,python,python-2.7,time-complexity,Python,Python 2.7,Time Complexity,在Python中,对于非常大的整数,整数比较的时间复杂度是多少?例如,如果我们使用2个函数计算1000的阶乘,然后检查等式,是O(1)吗 答案并不简单,但答案是显而易见的;-) 也就是说,如果两个整数实际上相等,不比较它们的所有位就不可能知道这一点。因此,在相等的情况下,所需的时间与位数成正比(如果N是比较数之一,则与log(abs(N))成正比) 如果它们事实上不相等,那么有几种情况,都与实现内部有关。长整数以2的幂为基数存储为“数字”向量。如果向量的长度不同,那么整数就不相等,这需要恒定的时
答案并不简单,但答案是显而易见的;-) 也就是说,如果两个整数实际上相等,不比较它们的所有位就不可能知道这一点。因此,在相等的情况下,所需的时间与位数成正比(如果
N
是比较数之一,则与log(abs(N))成正比)
如果它们事实上不相等,那么有几种情况,都与实现内部有关。长整数以2的幂为基数存储为“数字”向量。如果向量的长度不同,那么整数就不相等,这需要恒定的时间
但如果它们的长度相同,则必须对“数字”进行比较,直到找到第一对(如果有)不匹配的数字。这需要与需要比较的位数成比例的时间
然后将以上所有内容复杂化,以考虑可能的符号混合。对于我的python 2.7.12,我有一个错误:RuntimeError:最大递归深度exceeded@Louis检查这里:@ayushgp CodeSkulpter不是它自己的Python实现。它是专门为赖斯大学的一门课程而制作的。它的行为不像通常的Python中的CPython,因此为什么人们会因为你的代码而得到“最大递归深度”错误我编辑代码只是为了专注于我所问的问题。现在还不清楚你所说的N是什么,你似乎在说同时比较的是O(N)和O(logN)。这听起来好像有一个正确的答案在那里的某个地方,也许更容易,如果你只是在具体的情况下,1000!==1000!如果您正在比较N==M
,并且它们相等,则所需的时间与log(abs(N))
成比例-与表示N
所需的位数成比例。如果它们不相等,请再次阅读答案;-)为什么要对两个相同的亿万长的O(log(zillion))位序列进行顺序的、彻底的比较?事实并非如此。如果您有两个相等的亿万位序列,那么需要进行亿万位比较才能知道这一点。但是如果你比较两个整数,每个整数等于一个百万,那么只需要log2(百万)
位比较。@TimPeters好的,N是数字本身,这就是我想让你澄清的。
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"