我以前在这个话题上做过什么:
我已经在这个话题上停留了很长时间。我已经阅读了“Java 中的算法”和 Adam Drozdek 的书中计算简单算法复杂度的几个示例,并搜索了论坛,但我找不到这个问题。
问题:
在《Java 中的算法》等一些书籍中,为了计算算法的时间复杂度,将某条语句取为 n。但在《Adam Drozdek》的另一本书中,循环运行的次数被取为 n。因此,如果我用一个 n 来计算复杂度,那么在另一本书中,n 被视为其他东西,因此我计算的复杂度就变得错误了。示例如下。那么,我们如何才能就同一个程序的复杂性达成一致呢?
例子
有一个顺序搜索的例子。这是代码。
static int search(int a[], int v, int l, int r) {
int i;
for (i = l; i <= r; i++)
if (v == a[i]) return i;
return -1;
} `
考虑最坏的情况:
我认为 r 等于 n。所以循环运行n次......
1)比较和增量,比较运行n次,所以是3n。
2) 初始化和声明并返回 -1 运行 1 次,即 3。
所以方程变为
3n+ 3,复杂度为 O(n)。但本书正在考虑否。比较为 n 并且它已经从该视图计算了复杂度,因此结果是 n。