我完全是一个初学者,学习一门名为“算法和数据结构”的主题,并开始了有关Big-O表示法的部分。我读过许多关于此的不同材料,但其中大多数只是显示简单案例的计算示例。
该主题的作业有一些非常有趣的复杂示例,它们相互递归调用,并进行for循环,while循环等...我无法弄清楚,并且在计算时需要帮助。我非常感谢您提供的帮助和解释,以深入了解这一点。
也: 例3:我不明白返回“ 0xCAFE + 0xBABE + s”的含义是什么?我看不到它出现在方法中的任何地方,这对我来说真的很奇怪。
Ex No.4:起初我以为这些是不同的示例,但是我注意到方法g中有一个对方法f的调用,因此应该在一个示例中,我的假设正确吗?
1。
long c(int x) {
if (x <= 1) {
return 1;
} else {
long s = 0;
for (int i = 1; i < x; i++) {
s = s + c(x - 1);
}
return s;
}
}
2。
long d(int x) {
long s = -x * x;
while (s <= x * x * x) {
s++;
}
for (long i = s * x; i > 0; i--) {
s--;
}
return s;
}
3。
double e(long x, long y) {
double s = 0_0;
for (int i = 1; i <= x; i *= 2) {
for (double j = x; j >= 1; j /= 3) {
for (int k = 0; k < y; k += 4) {
s++;
}
}
}
return 0xCAFE + 0xBABE + s;
}
4。计算每个f&g
long f(int x, int y) {
if (x <= 0) {
return y;
} else {
return f(x - 1, 2 * y);
}
}
double g(int x, int y) {
double s = 0.0D;
for (long i = f(x, y); i >= 0; i--) {
s++;
}
return s;
}
5。
char h(int x) {
char h = 'h';
for (long i = h; i-- > ++i; x--) {
h++;
}
return h;
}
答案 0 :(得分:0)
Big-O只是一种衡量算法完成所需运行时间的方法。 在尝试理解这些示例之前,您应该先了解如何理解这些示例的基础,因为它们相当复杂。
一个小例子:O(n)
public void o(int n, int i) {
if (i == n)
return;
o(n, i++);
}
这类似于for循环
for (int i = 0; i <= n; i++)
在示例3中:
return 0xCAFE + 0xBABE + s;
是任意的,看起来它什么都不表示,并且“ s”将是通过其循环的方法复杂性的大O值,
for (int i = 1; i <= x; i *= 2) { // BigO = 2 ^ i
for (double j = x; j >= 1; j /= 3) { // BigO = (2 ^i) / 3
for (int k = 0; k < y; k += 4) { //BigO = y / 4