如何评估运行时的程序复杂性?

时间:2016-07-30 09:22:59

标签: algorithm time-complexity asymptotic-complexity

如何只运行程序正确而准确地评估程序运行时和内存复杂性?

我可以使用不同的输入大小多次运行程序。可以衡量它的工作时间。但是这次我该怎么办呢?怎么说(只看到“N - 时”结果)这是线性的还是二次函数?

我想我理解如何衡量内存复杂性。只需获取多少内存使用过程。并根据它来决定内存的复杂程度。

1 个答案:

答案 0 :(得分:0)

虽然我同意有关时间和内存复杂性应该被推理的问题的评论,而不仅仅是因为:

  • 运行时不仅取决于输入的大小,还取决于整个输入和程序本身(确实看快速排序)
  • 只有在非常大(特定)的输入大小
  • 之后才能看到某些O复杂性行为

我仍然认为如果有疑问,可以做一个快速测量以验证您的推理

关于时间复杂性:

从输入大小开始,例如这将采用例如总量T0。 然后给你的程序输入大小20.这将采用例如T1的总量。 然后给你的程序输入大小40.这将采用例如T2的总量。 然后给你的程序输入大小为80.这将需要例如T3的总量。 继续加倍,直到花费太多时间才能做到这一点。

每次将输入大小加倍时,执行时间都会发生变化。 过了一会儿,您会在程序中看到趋势

如果每次加倍输入时执行时间加倍,则执行时间为 Lineair

如果每次加倍输入时看起来执行时间翻两番,那么执行时间为二次

如果每次双倍输入时执行时间<8> 看起来很高,则执行时间为 Cubic

当然,执行时间几乎永远不会完全是双倍或四倍,但关于这些N时间的事情是,你估计当你走向时的行为一个无限大的输入