01-复杂度(complexity)

什么是算法?

算法是用于解决特定问题的一系列的执行步骤

如何判断一个算法的好坏?

正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)

时间复杂度(time complexity):估算程序指令的执行次数(执行时间)

空间复杂度(space complexity):估算所需占用的存储空间

大 O 表示法(Big O)

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

O(1)

public void o1(int n) {
    // 时间复杂度
    // 执行次数 = 1 + 6 + 6 + 6 = 1 + 18 = 19
    // 大 O 表示法:O(1)
    for (int i = 0; i < 6; i++) {
        System.out.println("i = " + i);
    }
    // 空间复杂度:O(1)
}

O(logn)

public void log2n(int n) {
    // 8 = 2^3      3 = log2(8)
    // 16 = 2^4     4 = log2(16)
    // 执行次数 = log2(n)
    // 大 O 表示法:O(logn)
    while ((n = n / 2) > 0) {
        System.out.println("n = " + n);
    }
}

O(n)

public void n(int n) {
    // 执行次数 = 1 + n + n + n = 1 + 3n = 3n + 1
    // 大 O 表示法:O(n)
    for (int i = 0; i < n; i++) {
        System.out.println("i = " + i);
    }
    // 空间复杂度:O(1)
}

O(n + k)

多个数据规模的情况

// O(n + k)
public void nk(int n, int k) {
    for (int i = 0; i < n; i++) {
        System.out.println("i = " + i);
    }
    for (int i = 0; i < k; i++) {
        System.out.println("i = " + i);
    }
}

O(nlogn)

public void nlog2n(int n) {
    // 外层 for 循环执行次数 = 1 + 2log2(n) + log2(n) * (内层 for 循环执行次数)
    //  = 1 + 2log2(n) + log2(n) * (3n + 1) = 3nlog2(n) + 3log2(n) + 1

    // 大 O 表示法:O(nlogn)

    // i += i 等价于 i = i + i 等价于 i = i * 2
    for (int i = 1; i < n; i += i) {
        // 内层 for 循环执行次数 = 1 + n + n + n = 3n + 1
        for (int j = 0; j < n; j++) {
            System.out.println("j = " + j);
        }
    }
    // 空间复杂度:O(1)
}

O(n^2)

public void n2(int n) {
    // 外层 for 循环执行次数 = 1 + n + n + n * (内层 for 循环的执行次数)
    //  = 1 + 2n + n * (3n + 1) = 3n^2 + 3n + 1

    // 大 O 表示法:O(n^2)
    for (int i = 0; i < n; i++) {
        // 内层 for 循环执行次数 = 1 + n + n + n = 3n + 1
        for (int j = 0; j < n; j++) {
            System.out.println("j = " + j);
        }
    }
    // 空间复杂度:O(1)
}

数据规模较小时

image-20221231182852406.

数据规模较大时

image-20221231183647985.

posted @ 2022-12-31 19:28  软柠柠吖  阅读(58)  评论(0编辑  收藏  举报