【发布时间】:2013-11-01 10:37:54
【问题描述】:
我用 Java 编写了一个函数 append(),我需要通过 O(N) 和 Θ(N) 来分析它的运行时复杂度。
这是原来的问题:
假设
append()的运行时复杂度为t = O(N),这意味着t也可以用t = C*N来表示。 (因为C是一个常数)因此
(t / N) = C。如果,例如
t = O(N^2),那么(t / N^2) = C等等。使用此方法查找
append()运行时复杂度。
所以我为 3 个不同的 Ns 运行了 N 次 append():1,000、5,000、10,000。
long start = System.currentTimeMillis();
for(i = 0; i < N; ++i) {
append();
}
long end = long start = System.currentTimeMillis();
System.out.println(end - start);
我写下了end-start,它是以毫秒为单位的运行时间。
现在,我如何使用此信息来获得 append() 的时间复杂度?
提前致谢!
【问题讨论】:
-
你已经有了时间复杂度,这是 O(N) 的事情。你要的是常数,这是对渐近计算复杂性的模糊使用充其量——你为什么要这样做?如果您想比较真实世界的性能,您可以跳过该部分并直接比较测量的时间。这就是所谓的基准测试。
标签: algorithm runtime big-o time-complexity asymptotic-complexity