假设我有两个计算复杂度:
O(k * M(n))
- 模幂运算的计算复杂度,其中k
是指数位数,n
是数字位数,M(n)
是牛顿-拉夫逊除法算法的计算复杂度。O(log^6(n))
- 一种算法的计算复杂度。
M(n)
是最让我困惑的。
O(n)
--计算a^n(mod c)需要进行n
次乘法和1次除法。此外,你的O(k * M(n))
似乎关注的是位复杂度,而第二个复杂度并不是位复杂度。 - Victor Sorokinn
趋近于无穷大时。但对于小的n
,情况可能完全相反。 - mitchus3 n^2
次乘法的算法,即O(n^2)
,另一个算法则会调用一百万次非常昂贵的函数,即O(n)
。尽管在渐近意义下第二个更好,但如果你的问题中n
大约为100,那么第一个更好。基本上,如果您追求的是可用性,我建议您查看性能比较研究,而不是理论复杂度,或者更好的是,如果有多个算法可用,请尝试它们并进行比较 :) - mitchus