我想知道在程序结束之前如何估计特定机器上java程序的总运行时间?我需要知道它需要花多少钱才能宣布进展。
FYI我的程序的主要算法需要O(n ^ 3)时间复杂度。假设n = 100000,在我的机器上运行这个程序需要多少钱? (双Intel xeon e2650)
问候。
答案 0 :(得分:1)
理论上,1GHz的计算能力应该导致大约10亿次简单操作。然而,找到简单操作的数量并不总是容易的。即使您知道给定算法的时间复杂度,这还不够 - 您还需要知道常数因子。从理论上讲,有可能需要一个线性算法,需要几秒钟才能为大小为10000
的输入计算某些东西(并且存在一些像这样的算法 - 比如线性预计算时间RMQ)。
然而,您所知道的是O(n^3)
某些内容需要按100000^3
次操作的顺序执行。因此,即使你的常数大约是1/10^6
(这是非常不可能的),这个计算也需要很多的时间。
我相信@ArturMalinowski的建议是解决问题的正确方法。如果您根据前面已知的某些序列对算法的性能进行基准测试,例如: {32,64,128,...}
或他提议{1,10,100,...}
。这样,您就能够以相对较高的精度确定常数因子。