我无法弄清楚如何证明
t(n) = sqrt(31n + 12n log n + 57)
是
O(sqrt(n) log n)
我还没有处理大字符号中的平方根,所以我遇到了很多麻烦!非常感谢任何帮助:)
答案 0 :(得分:3)
Big O表示法是关于算法特征(时钟时间,内存使用,处理时间)如何随着问题的大小而增长。
常量因素被丢弃,因为它们不会影响 值如何缩放。
次要条款也会被丢弃,因为它们最终没有效果。
所以你原来的等式
sqrt(31n + 12nlogn + 57)
立即简化为
sqrt(n log n)
平方根分布,就像其他类型的乘法和除法一样,所以这可以直接转换为:
sqrt(n) sqrt(log n)
由于日志将乘法转换为加法(这就是幻灯片规则有效的原因),因此变为:
sqrt(n) log (n/2)
同样,我们抛弃常数,因为我们对行为类感兴趣
sqrt(n) log n
而且,我们有答案。
更新
正如已经正确指出的那样,
sqrt(n) sqrt(log n)
不会成为
sqrt(n) log (n/2)
所以推导的结束是错误的。
答案 1 :(得分:0)
首先找到sqrt()
内的最大度因子,即12nlogn
。最大程度的因素使得所有其他因素在大O项中无关紧要,因此它变为O(sqrt(12nlogn))
。常数因子也无关紧要,因此它变为O(sqrt(nlogn))
。然后我想你可以使这个论点等于O(sqrt(n) * sqrt(logn))
或O(sqrt(n) * log(n)^(1/2))
,并消除logn
上的权力来获得O(sqrt(n)logn)
。但我不知道最后一步的技术理由是什么,因为如果你可以将sqrt(logn)
变成logn
,为什么你不能将sqrt(n)
变成n
}?
答案 2 :(得分:0)
提示:考虑| x |的sqrt(1 + x)扩展的主要术语< 1。