这个循环的时间复杂度是多少,因为它不会迭代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次?
答案 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)。