【发布时间】:2022-01-09 17:38:48
【问题描述】:
我正在尝试确定这些 code-sn-ps 的 Big-O 表示法:
#1:
public static void printProducts (int n) {
int a = 0; // O(1)
int b = n; // O(1)
// O(n)?
while (a < b){
// O(?) This if is checked n times, but how many times is it ran?
if (a * b == n) {
System.out.println( a + "*" + b + "=" + a*b ); // O(1)
a++; // O(1)
b--; // O(1)
}
else if ( a * b > n ) {
b--; // O(1)
}
else if ( a * b < n ) {
a++; // O(1)
}
}
}
#2:
public static void printProducts2 (int n) {
int a = 1; // O(1)
int b = n; // O(1)
// O(log n)
while (a < b){
if (a * b == n) {
System.out.println( a + "*" + b + "=" + a*b ); // O(1)
a++; // O(1)
b--; // O(1)
}
else {
if ( a * b > n ) {
b = n/a; // O(log n)
}
else if ( a * b < n ) {
a++; // O(1)
}
}
}
}
我已经得出结论,第一个代码的 Big-O 符号是 O(n),第二个是 O(log n),但我不确定它是否正确。我在正确的轨道上吗?
在提出我自己的问题之前,我曾尝试查看this 问题,但我不太明白它是如何应用在这里的。
【问题讨论】:
-
由于 Big-O 表示法的性质,循环体中发生的事情并不重要,但更多的是需要多少次迭代。这将决定整体的复杂性。
标签: java time-complexity runtime big-o