当给出每个输入的输入和时间时,获取函数时间复杂度的最简单方法是什么?
例如:
n | 10 20 40 80 160 320 640
time | 1 3 9 60 475 3732 29835
我怎样才能找到这张桌子的时间复杂度?
答案 0 :(得分:1)
假设您对多项式复杂性感兴趣( O(n), O(n 1.5 ), O(n 2 ) ......)。
估计函数实现的时间复杂度的最简单方法是查看最后两个最大的数据点。
您将输入大小 n 从320倍增加到640倍(* 2)。 而你的执行时间增加了8倍(29835/3732 = 7.994 ......)。
因此,您的时间复杂度估计是 O(n 3 ),因为2 3 = 8。 应该注意的是,只有在足够大的数据集上测试它( n 很大)并且您的低阶项不再显着影响解决方案时,此估计才是正确的。此外,这是算法实现的时间复杂性,而不是算法本身。
另一种理解代码复杂性的有用技巧是在对数 - 对数图上绘制它们( t 与 n )。由于确定复杂度的多项式的程度将变为对数 - 对数图上的线的斜率,这可以使您了解复杂性是什么以及是否到达渐近区域。此外,这些图表可以让您了解低阶条款,日志条款等。
然而,通常,您通过一些理论分析知道算法的复杂性,然后您可以将实际时间与理论预测进行比较。这样可以避免在估算过程中出现很多陷阱。