如何根据时间复杂度计算算法的模拟运行时间?例如,如果我们知道算法的时间复杂度是O(n),那么它在离散事件模拟器中的运行时间是多少?我相信模拟器需要考虑运行算法的节点的容量,但我们如何使用它们来计算运行时间。
在模拟器中,我有一个广播消息的中心节点。广播消息的每个接收节点处理如下消息:
handleMessage(){
processMessage();
replyToCentralNode
}
在模拟器中,如何计算processMessage的执行时间?我可以得到像10s或0.1ms的东西吗?
答案 0 :(得分:0)
如果没有更多信息,您可以为算法复杂度O(f(N))
做的最好的事情就是评估C.f(N)
,C
是机器相关常量。为了获得真实的C
,您可以估算(或基准测试)真实机器上的运行时间,对于某些N
(不是太小,不太大)。
对于给定的架构,C
将与时钟速度大致成比例。在架构和世代之间,C
将会因此而波动。
您也可以使用机器的MIP或FLOP规格,但总是以相对的方式:在具有已知* Ps的机器上获得真实的运行时间,并按比例推断另一个。
但这一切都非常粗糙。请记住,固定N的运行时间的方差可能很大,通常f(N)是一个不好的近似值/上限。