最近在刷算法题,凡算法题就涉及到时间复杂度的讨论,在算法题中,这道题能否在规定时间内通过与你算法的平均时间复杂度有关,也与这道题的数据量大小有关,因此写算法题的时候要综合考虑这两个因素,我们的算法基础基本够我们估计出平均时间复杂度,那么我们如何根据数据量以及平均复杂度估计算法解决问题的大概时间内,这个是可以的。
每台电脑的硬件不同,每秒的计算量必定不同,但我这里给出一个大概的计算方法:
package com.db.JUC;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 使用一个实现了Callable接口的类,让来一直做加法运算,返回加法运算的结果
* @author Administrator
* @date 2021/4/228:00
*/
public class OneSecond {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask
new Thread(ft).start();
System.out.println(ft.get());
}
static class Add implements Callable
@Override
public Long call() throws Exception {
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = LocalDateTime.now();
long i = 0;
while (Duration.between(start, end).toMillis() < 1500) {
i++;
end = LocalDateTime.now();
}
return i;
}
}
}
本机的单秒运算量大概在:10的八次方这个位置
可以预估,大部分电脑的单秒运算量应该在10的七次方到10的九次方之间。
有了这个预估值,在计算的时候便可以根据O()以及数据量大致估算运行时间了。