代码Θ(nLogn)的时间复杂度如何?

时间:2016-04-25 17:06:29

标签: c algorithm loops time-complexity big-o

 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)

1 个答案:

答案 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;
    }

}