请问如何设置程序运行1s,看看在不同的时间复杂度上能操作多少N
回答:直接模拟运行,把程序运行所花费的时间给输出一下,然后从10000开始,对比O(logN)、O(N)、O(N*logN)、O(N^2)、O(n^3)等;这样可以让你产生一个区间范围,大概就可以估计出来一秒钟可以执行多少次指令;
示例:
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);
}
}
但实际会遇到的一个问题就是,编译器会对指令进行优化,所以你需要设计一个较为复杂的计算,这样才可以体现出来算法的差距