1

我坐在这里,在一个关于海量数据集算法的课程中完成这项作业,尽管我对 Big-Oh 非常有信心,但 Little-Oh 符号的使用让我感到困惑。

我不想要任务的解决方案,因此我不会介绍它。相反,我的问题是我如何解释时间复杂度o(log n)

我从定义中知道,算法 A 的增长速度必须比 o(l​​og n) 慢,但我不确定这是否意味着算法必须在恒定时间内运行,或者它是否仍然允许为log n在某些条件下,例如 c = 1 或者如果它真的是log (n-1)

假设一个算法的运行时间为O(log n)但实际上进行了两次迭代,因此 c = 2,但2*log n仍然是O(log n),当我说这不成立时,我说得对吗小哦?

非常感谢任何帮助,如果需要澄清,我将提供作业

4

2 回答 2

3

说 the fis 'little-oh-of g' f = o(g),意味着商

|f(x)/g(x)|

接近 0 时x接近无穷大。参考您的示例o(log n),该类包含类似的功能log x / log (log x)sqrt(log x)以及更多功能,因此o(log x)绝对不暗示O(1). 另一方面,log (x/2) = log x - log 2,所以

log (x/2) / log x = 1 - log 2 / log x -> 1

并且log (x/2)不在课堂o(log x)上。

于 2012-02-19T11:07:01.433 回答
-1

对于 Little-Oh,对于所有 x,f(x) 不必小于 g(x)。只有在 x 的某个值之后它才必须更小。(对于你的问题,在一定条件下还是允许log n的。)

例如:

 let f(x) = 5000x and g(x) = x^2

当 x 接近无穷大时,f(x) / g(x) 为 0,因此 f(x) 是 g(x) 的 litte-o。但是,在 x = 1 时,f(x) 大于 g(x)。只有在 x 大于 5000 之后,g(x) 才会大于 f(x)。

little-o 真正告诉我们的是 g(x) 总是以比 f(x) 更快的速度增长。例如,看看在 x = 1 和 x = 2 之间 f(x) 增长了多少:

 f(1) = 5000
 f(2) = 10000 - f(x) became twice as big

现在查看相同间隔的 g(x):

 g(1) = 1
 g(2) = 4 - g(x) became four times bigger

当 x 值越大时,这个比率会增加得更多。现在,由于 g(x) 以更快的速度增加,并且因为我们将 x 取到无穷大,所以在某些时候它会变得大于 f(x)。但这不是 little-o 所关心的,而是变化率。

于 2012-02-19T10:55:48.000 回答