循环for (int i=0; i <n%10; ++i)的时间复杂度:O(1)还是O(n)?
循环
for (int i=0; i <n%10; ++i)的时间复杂度分析 你的观点是正确的,这个循环的时间复杂度是O(1),具体分析如下:
时间复杂度的核心逻辑
大O表示法的本质是描述算法运行时间随输入规模增长的趋势。这里的输入规模是n,但循环的迭代次数由n%10决定——无论n取值多大,n%10的结果只能是0~9之间的整数(包括0,此时循环不执行)。也就是说,循环的最大迭代次数是9次,是一个固定常数,不会随着n的增大而增长。朋友观点的错误之处
“迭代次数与n直接成正比”的说法不成立,因为n%10和n不存在线性关联:
- 当
n=10、100、1000时,n%10=0,循环0次; - 当
n=11、101、1001时,n%10=1,循环1次;
可见,无论n增长到多大,迭代次数始终被限制在极小的固定范围内,完全不会随n的增大而线性增长。
- 符合O(1)的定义
O(1)代表常数时间复杂度,即算法的运行时间不依赖于输入规模,始终保持在固定的时间量级内。这个循环的执行次数上限是9,完全满足常数时间的特征。
内容的提问来源于stack exchange,提问作者Cyrus Mathew
相关产品推荐
相关产品推荐

