目前接受的不会给你任何理论估计,除非你能以某种方式使用实验测量的时间拟合近似它们的函数.这个答案为您提供了一种手动技术来填补这一空白.
首先猜测算法的理论复杂度函数.您还可以通过实验测量实际复杂性(操作次数,时间或任何您认为实用的),以解决日益严重的问题.
例如,假设你猜算法是二次的.测量(说)时间,并计算时间与猜测函数的比率(n ^ 2):
for n = 5 to 10000 //n: problem size
long start = System.time()
executeAlgorithm(n)
long end = System.time()
long totalTime = end - start
double ratio = (double) time / (n * n)
end
Run Code Online (Sandbox Code Playgroud)
.随着n向无限的方向发展,这个比例......
n你试过的大值的理论复杂度)基本上,使用大O表示法的定义,即f(x) = O(g(x)) <=> f(x) < c * g(x)- f(x)算法的实际成本,g(x)是你所猜的,并且c是一个常量.所以基本上你试着通过实验找到极限f(x)/g(x); 如果你的猜测达到真正的复杂程度,那么这个比率将估计常数c.