我想知道如何在程序结束之前估计特定机器上java程序的总运行时间?我需要知道需要多少时间,以便我可以宣布进展情况。
仅供引用,我的程序的主要算法需要 O(n^3) 时间复杂度。假设n= 100000,在我的机器上运行这个程序需要多少时间? (双英特尔至强 e2650)
问候。
最佳答案
理论上,1GHz 的计算能力应该会产生大约 10 亿次简单操作。然而,找到简单操作的数量并不总是那么容易。即使您知道给定算法的时间复杂度,这也是不够的 - 您还需要知道常数因子。理论上,可以有一个线性算法,需要几秒钟的时间来计算大小为 10000 的输入(并且存在一些类似的算法 - 例如线性预计算时间 RMQ)。
但是,您所知道的是,需要按 100000^3
运算的顺序执行 O(n^3)
的操作。因此,即使您的常量约为1/10^6
(这是极不可能的),此计算也将花费大量时间。
我相信@ArturMalinowski 的提议是解决您的问题的正确方法。如果您对预先已知的某些序列的算法性能进行基准测试,例如{32,64,128,...}
或按照他的建议{1,10,100,...}
。这样您就能够以相对较高的精度确定常数因子。
关于java - 估算java程序在程序结束前的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23504490/