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

算法时间复杂度分析:RPN计算器的最坏与平均情况求解

分析RPN计算器evaluate函数的时间复杂度

嗨,很高兴看到你在钻研算法时间复杂度,还自己动手推导,这种实践精神超赞!针对你提到的这款RPN计算器的evaluate函数,我来帮你梳理下它的时间复杂度分析思路:

首先先把你给出的代码片段结合标准RPN处理逻辑整理出来:

function evaluate() { 
  var input = prompt("Please enter your input string\n\nExamples of input strings:\n\n\t1. 10 4 5 + *\n\t2. 10 4 5 + * 2 +\n\t3. 10 8 *"); 
  // 标准RPN核心处理逻辑
  const tokens = input.split(/\s+/);
  const stack = [];
  for (const token of tokens) {
    if (!isNaN(Number(token))) {
      stack.push(Number(token));
    } else {
      const b = stack.pop();
      const a = stack.pop();
      switch(token) {
        case '+': stack.push(a + b); break;
        case '-': stack.push(a - b); break;
        case '*': stack.push(a * b); break;
        case '/': stack.push(a / b); break;
        // 其他运算符的处理逻辑
      }
    }
  }
  return stack.pop();
}

最坏情况时间复杂度

  • 输入处理阶段:将输入字符串分割为token的操作是线性扫描,时间复杂度为O(n),其中n是输入字符串的长度(或token的总数,两者呈线性相关)。
  • 遍历处理阶段:每个token的处理都是常数时间操作——数字直接压栈,运算符弹出两个元素计算后再压栈,这些栈操作和算术运算的时间开销都是固定的O(1)。
  • 综上,整个evaluate函数的最坏情况时间复杂度是O(n)。这里的“最坏情况”其实和最好情况复杂度一致,因为无论输入是全数字(持续压栈)还是符合语法的混合输入,都需要遍历所有token一次,且每个操作无额外嵌套开销。

平均情况时间复杂度

  • 假设输入符合RPN语法规范(比如k个数字对应k-1个运算符),遍历每个token的操作依然是O(1)级别的。
  • 不管数字和运算符的比例如何变化,每个token都只会被处理一次,没有嵌套循环或递归带来的额外开销,因此平均情况时间复杂度同样是O(n)。

额外补充:如果函数包含输入验证、错误处理(比如栈为空时弹出元素的异常捕获),只要这些处理逻辑是线性遍历或常数时间操作,都不会改变整体的线性时间复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:00