【问题标题】:Time complexity of this while loop:此 while 循环的时间复杂度:
【发布时间】:2014-09-23 22:23:45
【问题描述】:

这个循环的时间复杂度是多少,因为它不迭代 1:

while (parser.hasNext())
            {
                token = parser.next();

                if (isOperator(token))
                {
                    op2 = (String)(stack.pop());
                    op1 = (String)(stack.pop());
                    result = evaluateSingleOperator(token.charAt(0), op1, op2);
                    stack.push(result);
                }
                else
                    stack.push(token);
            }

            return result;

会不会是 O(n),因为如果有 5 个元素,h e l l o,那么循环内的语句将运行 5 次?

【问题讨论】:

  • 它是O(n),其中 n 是您的parsertokens 的数量。

标签: java time complexity-theory


【解决方案1】:

假设您的大多数操作具有典型语义,并假设 evaluateSingleOperator(char tokenChar, String op1, String op2) 为 O(|op1| + |op2|) 并返回结果的字符串表示形式,其长度为结果是O(|op1| + |op2|),那么这实际上有O(n^2)的复杂度。

例如,考虑对输入进行处理: 10*10*10*10*10*10*....*10

重复乘法数百次(因此结果不仅仅适合简单的 Integer 或 Long 值)。然后你的 evaluateSingleOperator(...) 调用将随着输入的长度线性增长。

解析过程本身只需要O(n)次迭代,你只会调用evaluateSingleOperator O(n)次,但是为了保证总的操作时间是O(n),你需要知道evaluateSingleOperator最多需要 O(1)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 2016-12-17
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多