【发布时间】:2020-01-08 16:20:48
【问题描述】:
编辑:约束值范围 [2,1000000000] 和 a
def sqrtoccurrence(a: Int, b: Int): Int = {
val sqrtA = Math.ceil(Math.sqrt(a)).toInt
val sqrtB = Math.floor(Math.sqrt(b)).toInt
if(sqrtA > sqrtB) 0
else 1 + sqrtoccurrence(sqrtA, sqrtB)
}
是 O(sqrt(n)) 还是 O(log(n))?我不擅长计算递归运行时间。我知道它的树的深度以及递归函数被调用的次数。在这种情况下,恒定工作 sqrt 会影响多少,所以是否可以忽略它?但也许我错了。有很大帮助的解释。 谢谢
【问题讨论】:
-
n 在这里代表什么?我在您的代码或算法中看不到 n。
-
这段代码似乎有缺陷。如果您设置 a = 1,它将永远不会完成。如果 a > 1,那么它似乎是 O(sqrt(n)) 尽管如果 a 和 b 是随机数,它将立即终止大约一半的时间.
标签: algorithm scala performance runtime big-o