这个while循环的时间复杂度:

时间:2014-09-23 22:23:45

标签: java time complexity-theory

这个循环的时间复杂度是多少,因为它不会迭代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个元素,那么循环中的语句将运行5次?

1 个答案:

答案 0 :(得分:0)

假设大多数操作的典型语义,并假设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)。