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

判断整数除法算法的最坏时间复杂度:O(n)是否正确?

正整数除法代码的最坏情况时间复杂度疑问

先看这段要求a>0,b>0的正整数除法C代码:

int div(int a, int b) {
    int count = 0;
    int sum = b;
    while (sum <= a) {
        sum += b;
        count++;
    }
    
    return count;
}

我在判断它的最坏情况时间复杂度时,给出的答案是O(n)——理由是当b=1时,while循环会执行a次,此时时间复杂度为O(a),我认为O(a)等价于O(n)(括号内的字母无关紧要)。但书中给出的答案是O(a/b),这个结果显然合理,不过我想确认:O(n)这个答案是否也正确?


解答

  • O(n)这个答案不算严格正确,因为时间复杂度的表示需要明确和问题输入参数的关联。这里的核心输入是a和b,O(a/b)能准确反映循环执行次数与两个输入变量的直接关系。
  • 你提到的最坏情况(b=1时O(a/1)=O(a))是对的,但直接写O(n)的问题在于:n没有明确对应到输入中的a。如果没有额外说明n代表a,这个符号就缺乏上下文,无法让读者直接理解它和输入参数的关联,存在歧义。
  • 在算法分析的专业场景中,时间复杂度的符号应该尽可能清晰地绑定到输入规模的变量,这样才能准确传达算法的性能特性。因此书中给出的O(a/b)是更严谨、标准的答案,而未明确n含义的O(n)不能算作正确的专业表述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:10:28