【发布时间】:2011-10-30 21:30:48
【问题描述】:
我最近一直在做 BigO,我得到的公式没问题,但我写了一段代码,它接受并输入并返回完成排序所花费的时间。所以我有输入和时间,我如何使用它来分类它是什么类型的 BigO?我已经制作了图表,可以看到它们是哪种类型,但我不能使用公式来做到这一点?我不擅长数学,我认为这是我的问题!
例如我得到:
Size Time Operations
200 2 163648
400 1 162240
800 15 2489456
1600 6 10247376
3200 19 40858160
6400 79 165383984
12800 318 656588080
25600 1274 2624318128
51200 5059 10476803408
102400 20333 41969291968
通过查看图表和比较,我知道这是 O(n^2),但是如何证明呢?
【问题讨论】:
-
O 表示法依赖于操作次数,而不是秒意义上的时间。
-
你只能通过严格分析源代码来“证明”它。没有多少样本可以“证明”任何事情。 (换句话说,大 O 表示法完全是关于渐近行为;即“足够大”输入的行为。“足够大”没有固定定义;您必须分析算法本身。)
-
A O(n^2) 算法也是 O(n^n) 例如,因此只需给出一些可笑的糟糕指数函数作为答案是微不足道的,并且答案将是正确的。您真正需要的是 Θ,它限制了您的运行时间上下。
标签: math computer-science big-o