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

如何计算嵌套循环的时间复杂度?附while循环实例疑问

两个嵌套循环代码的时间复杂度分析

首先明确前提:时间复杂度的统计规则会直接影响结论,核心差异在于是否将用户输入错误导致的重试次数计入可变规模。

示例1分析

代码如下:

while self.rotors == []:
      for i in range(3):
          rotor = input("Choose rotor {}: ".format(i + 1))
          while rotor not in range(1, 6):
                print("\nInvalid. You can only choose from 1 to 5 rotors.")
  • 若默认所有用户输入均合法,无需重试:
    最外层while self.rotors == []仅执行1次(执行完3次转子录入后self.rotors不再为空),内层for循环固定执行3次,最内层的输入校验while循环执行0次,整体操作次数是固定常数,大O表示法中常数会被归为O(1),也就是你提到的O(3)。
  • 若统计最坏情况下的用户输入重试次数:
    外层while循环固定执行1次可忽略;设r为单个转子输入的无效重试次数(可变,由用户输入行为决定),整体时间复杂度为O(3×r),和你提到的O(n×3×r)结论一致,仅这里的n恒等于1可省略。

示例2分析

代码如下:

for i in range(3):
    start = input("Enter the starting point of rotor {}: ".format(i + 1))
    while start not in self.rotors[i]:
          print("\nEnter one alphabet character or a number form 0-9 ONLY.")
  • 若默认所有用户输入均合法,无需重试:
    外层for循环固定执行3次,内层校验while循环执行0次,整体是固定常数级复杂度,即你提到的O(3),大O规范写法为O(1)。
  • 若统计最坏情况下的用户输入重试次数:
    设n为单个起始点输入的无效重试次数(可变),整体时间复杂度为O(3×n),大O规范写法可省略常数系数记为O(n)。

额外说明:大O表示法用于描述操作次数随输入规模增长的上界,固定常数系数和常数项都会被省略,因此O(3)本质上等价于O(1),只有和可变输入规模相关的变量才会保留在表达式中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:01