算法课题目,来问问大家

请问如何设置程序运行1s,看看在不同的时间复杂度上能操作多少N

回答:直接模拟运行,把程序运行所花费的时间给输出一下,然后从10000开始,对比O(logN)、O(N)、O(N*logN)、O(N^2)、O(n^3)等;这样可以让你产生一个区间范围,大概就可以估计出来一秒钟可以执行多少次指令;
示例:

img

package code;

/**
 * @author bbyh
 * @date 2023/3/3 0003 13:07
 * @description
 */
public class Test {
    private static final int COUNT = 10000000;

    public static void main(String[] args) {
        testN();
        testN2();
    }

    private static void testN2() {
        long start = System.currentTimeMillis();
        double k = 0;
        for (int i = 0; i < COUNT; i++) {
            for (int j = 0; j < COUNT; j++) {
                k = 2 * i + 1;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        System.out.println("k: " + k);
    }

    private static void testN() {
        long start = System.currentTimeMillis();
        int k = 0;
        for (int i = 0; i < COUNT; i++) {
            k = 2 * i + 1;
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        System.out.println("k: " + k);
    }
}

但实际会遇到的一个问题就是,编译器会对指令进行优化,所以你需要设计一个较为复杂的计算,这样才可以体现出来算法的差距