我开始学习计算复杂性、大O符号等知识,我被要求编写一个整数分解算法并确定它的复杂度。我已经编写了算法并且它可以工作,但是我在计算复杂度时遇到了困难。伪代码如下:
DEF fact (INT n)
BEGIN
INT i
FOR (i -> 2 TO i <= n / i STEP 1)
DO
WHILE ((n MOD i) = 0)
DO
PRINT("%int X", i)
n -> n / i
DONE
DONE
IF (n > 1)
THEN
PRINT("%int", n)
END
我尝试的做法非常错误:
f(x) = n-1 + n-1 + 1 + 1 = 2n
所以
f(n) = O(n)
我认为这是错误的,因为分解算法应该是计算上困难的,甚至不能是多项式。你有什么建议可以帮助我吗?也许我只是太累了,在这个深夜时间弄得一团糟 :(
提前感谢您。