【发布时间】:2021-04-21 21:43:33
【问题描述】:
我最近在 Steven Skiena 的“算法设计手册”中读到谐波 Sum 是 O(lg n)。我理解这在数学上是如何实现的,但是当我看到它的递归解决方案时,如下所示:
public static double harmonic(int n) {
if(n == 1) {
return 1.0;
} else {
return (1.0 / n) + harmonic(n - 1);
}
}
我看不出这是 O(lg n),我认为它是 O(n)。如果是这样的话,上面的代码真的是 lg(n) 吗?如果没有,有人可以给我举个例子吗?
【问题讨论】:
-
您将渐近符号与时间复杂度分析混淆了。 n 项之和的 值 为 O(log n),这与计算该值所需的时间不同。渐近符号可用于描述任何函数,而不仅仅是输出为运行时间的函数。
-
对不起,我不明白你的意思。输出为运行时间的函数是什么意思?