【发布时间】:2011-12-06 13:42:12
【问题描述】:
在课堂上,我们看到了一个 2^n mod(m) 的算法。
to find 2^n mod(m){
if n=0 {return 1;}
r=2^(n-1)mod(m);
if 2r < m {return 2r;}
if 2r > =m {return 2r-m;}
}
我们被告知运行时间是 O(n*size(m)),其中 m 的大小是 m 中的位数。
我理解 n 部分,但我无法解释 size(m) 除非是因为涉及减法。任何人都可以对此有所了解吗?
提前致谢。
【问题讨论】:
-
什么你做了n次?你正在做一个求幂,一个模数,一个比较,也许还有一个减法。所以...
-
我相信
r=2^(n-1)mod(m);是对同一个函数的递归调用 -
O(n) 没问题。 O(n) == O(n*some_k)。尽管
sizeof(m)是针对我们允许任意大小的m仅具有用于固定大小算术的硬件的情况。 -
是的,这是递归的。您最多递归 n 次。我无法弄清楚哪些操作(或者可能是所有操作)在复杂性中占大小(m)。
标签: algorithm recursion complexity-theory modular