【发布时间】:2020-12-22 21:15:43
【问题描述】:
fun root(n) =
if n>0 then
let
val x = root(n div 4);
in
if (2*x+1)*(2*x+1) > n then 2*x
else 2*x+1
end
else 0;
fun isPrime(n,c) =
if c<=root(n) then
if n mod c = 0 then false
else isPrime(n,c+1)
else true;
这里的 root(n) 函数的时间复杂度是 O(log(n)):数字在每一步都除以 4,函数本身的代码是 O(1)。 isPrime 函数的时间复杂度为 o(sqrt(n)),因为它从 1 迭代运行到 sqrt(n)。我现在面临的问题是这两个函数的顺序是什么?它只是 O(sqrt(n)) 还是 O(sqrt(n)*log(n)) 或其他什么?
总的来说,我是大 O 表示法的新手,我浏览了多个网站和 youtube 视频,试图理解这个概念,但我似乎无法自信地计算它......如果你们能指出我一些资源可以帮助我练习计算,这将是一个很大的帮助。
【问题讨论】:
-
这能回答你的问题吗? Big O of Recursive Methods
-
@SimonShine 是的,谢谢,我将不得不花更多的时间来理解主定理,乍一看似乎很有帮助......你能确认一下代码的顺序吗不过我发了?