帮助渐近分析

时间:2010-09-28 18:22:24

标签: big-o asymptotic-complexity

我对编程很陌生,最近已经介绍了渐近复杂性的主题。我很好奇的是如何计算排序方法的渐近复杂性,给定元素的数量和排序它们所花费的时间。

这是我的意思的一个例子。

  • 'sortArray'用400个元素对排序数组进行排序的时间:4
  • 'sortArray'用800个元素对排序数组进行排序的时间:8
  • 'sortArray'用1600个元素对排序数组进行排序的时间:16
  • 'sortArray'用3200个元素对排序数组进行排序的时间:26

  • 'sortArray'用400个元素对随机数组进行排序的时间:255

  • 'sortArray'用800个元素对随机数组进行排序的时间:958
  • 'sortArray'用1600个元素对随机数组进行排序的时间:4059
  • 'sortArray'用3200个元素对随机数组进行排序的时间:16585

关于如何计算这样的大O符号的任何帮助?谢谢!

1 个答案:

答案 0 :(得分:2)

根据定义,算法的渐近复杂度表示随着输入的大小增加(在时间,空间或一些其他资源中)的增长率。最好分析算法本身以确定这种增长率。但是,如果您只有一个“黑匣子”排序算法,并且您只知道输入的大小和结果时间,那么您可以做的最好的事情就是检查输入与时间的关系图是否会在特定功能的模式。

为了测试这个想法,图形函数如下:

  • f(n)= n
  • f(n)= n ln n
  • f(n)= n ^ 2

等,并查看哪个最类似于您创建的运行算法的图表。请记住,渐近分析最终会在每个术语和任何低阶项上省略常数因子。因此,如果您的算法仍然以线性时间运行,即使图形看起来像f(n)= 2n,您仍然有O(n)算法。