int n;
int i, j, k = 0;
for (i = n/2; i <= n; i++) {
for (j = 2; j <= n; j = j * 2) {
k = k + n/2;
}
}
只需要计算代码片段的时间复杂度,答案是Θ(nLogn),但是你能解释它是如何Θ(nLogn)
答案 0 :(得分:4)
这真的不那么难。
外循环运行n/2
次。这是O(n)
复杂性。
内循环再次仅取决于n
。它不依赖于第一个循环中的i
。因此,对于内循环的复杂性,我们可以完全忽略外循环。多么幸运! j
每次2
倍数logarithm base 2
,因此我们O(log(n))
。那是O(n log(n))
。
循环是嵌套的,所以我们相乘,从而结束:
public enum CarType {
HONDA(1, "Honda"),
TOYOTA(2, "Toyota"),
ALFA(3, "Alfa Romeo")
// ...
;
private int id = 0;
private String displayName;
public static CarType forId(int id) {
for (CarType type : CarType.values()) {
if (type.id == id) {
return type;
}
}
throw new IllegalArgumentException("No car type with number " + id);
}
private CarType(int id, String displayName) {
this.id = id;
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
public int getId() {
return id;
}
}