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

算法分析两种解法正确性与差异 渐近类归属问题咨询

算法复杂度习题解答

疑问A:两种解法的正误与差异

解法1相关说明

解法1的代码逻辑为i每次加4,循环执行次数为⌈n/4⌉+1,和输入规模n成线性正比,所有单次操作都是常数阶O(1),因此整体时间复杂度的紧确界为Θ(n),上界为O(n),结论基本正确,仅写法Θ = O(n)不够严谨:Θ是紧确渐近界,O是上界,二者概念不同,规范写法应为时间复杂度为Θ(n)或O(n)。

解法2的错误

解法2存在三处核心错误:

  • 代码逻辑本身有问题:i初始值为0,每次执行i = i *4后i仍为0,只要n≥0就会进入死循环,不存在有限的执行次数
  • 循环次数计算错误:哪怕修正初始值为1(避免死循环),i每次乘4的增长速度是指数级,循环次数为log₄(n),属于对数阶,远低于线性阶n,它标注的循环开销n完全不符合实际
  • 渐近复杂度概念错误:Θ描述的是输入规模趋近于无穷时的增长阶,需要忽略常数系数和低阶项,哪怕假设它的操作数计算是对的,3n+2的渐近阶也是Θ(n),不能把常数和系数写进Θ的结果里

二者本质差异是对应的代码迭代逻辑完全不同,解法1是线性增长的迭代,解法2是指数增长的迭代(还存在死循环bug),且解法2对渐近复杂度的概念应用完全错误。

疑问B:print语句的开销是否需要计算

所有执行语句的开销原则上都需要纳入统计,但渐近复杂度分析只关注最高阶的增长项:

  • 像本题中打印单个变量的print属于O(1)常数阶操作,最终会被更高阶的项覆盖,算进去也不影响最终的复杂度结论
  • 如果print本身的开销和输入规模相关(比如打印长度为n的数组、打印n个字符),那它的开销就需要纳入最高阶项的计算,直接影响最终复杂度结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:02