疑问:i<n与i<100000的循环时间复杂度是否相同?为何是O(1)?
两个循环的时间复杂度差异解析
这两段代码的时间复杂度完全不同:第一个是O(n),第二个是O(1),核心原因在于时间复杂度衡量的是算法操作次数随输入规模n的增长趋势,而非固定的循环次数。
对于第一个循环:
for(int i=0;i<n;i++)
循环执行次数直接由输入规模n决定——n越大,循环运行次数越多,操作次数与n严格成正比。当n趋向于无穷大时,运行时间会线性增长,因此时间复杂度为O(n)(线性时间复杂度)。对于第二个循环:
for(int i=0;i<100000;i++)
这里的循环次数是固定不变的100000次,不管输入规模n如何变化(哪怕n从1增长到10亿),循环执行次数都不会改变。它的运行时间不随n的增长而变化,属于常数级操作,因此时间复杂度为O(1)(常数时间复杂度)。
你之前的误解在于混淆了“固定次数的遍历”和“随n变化的遍历”:时间复杂度中的“最坏情况”是针对输入规模n的变化而言的,比如n趋近于无穷大时的表现,而非固定数值的完整遍历。100000是个与n无关的常数,不管它数值多大,只要不随n变化,时间复杂度就是O(1)。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

