You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求下述函数的最坏情况时间复杂度(大O表示法)并说明原因

分析test函数的最坏情况运行时间(大O表示法)

先直接给结论:这个函数的最坏情况运行时间是 O(n)。下面一步步拆解原因:

首先把代码规整一下方便分析(假设缺失的变量声明补全,内部省略的操作都是O(1)的基础操作):

void test(int n) {
    int counter = 0;
    for(int i=0; i<5000; ++i){
        counter += i;
        // 第一个内层循环
        for(int j=0; j<n; ++j){
            // 此处为O(1)的操作
        }
        // 第二个内层循环
        for(int k=0; k<i; ++k){
            // 此处为O(1)的操作
        }
    }
}

接下来拆解每一部分的时间开销:

  • 外层循环:这是固定的5000次迭代,不管输入规模n的值是多少,这个循环的次数都是常数,不会随n变化。
  • 第一个内层循环:每次外层循环都会执行n次,总操作次数是 5000 * n。在大O表示法中,常数系数会被忽略,所以这部分的时间复杂度是O(n)。
  • 第二个内层循环:迭代次数跟着i变化,i从0到4999,总次数是等差数列求和:0 + 1 + 2 + ... + 4999 = (4999 * 5000)/2,这是一个固定的常数(约1250万次),不管n怎么变化,这部分的操作数都不会改变,属于O(1)的量级。

大O表示法核心关注的是随着输入规模增长时的性能趋势,我们只需要看占主导地位的项。这里O(n)的项会随着n的增大持续增长,而O(1)的常数项和外层的常数循环次数都不会影响这个趋势。因此整个函数的最坏情况时间复杂度就是O(n)。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:28:11