Est*_*tex 6 algorithm performance big-o notation
在我的教科书中,我看到以下内容:
定义算法的阶
算法 A 是 f(n) 阶——表示为 O(f(n))——如果常数 k 和 n 0存在使得 A 需要不超过 k * f(n) 个时间单位来解决大小为 n > = n 0。
我理解:不同复杂性类别的时间要求以不同的速度增长。例如,随着 n 值的增加,O(n) 所需的时间增长比 O(n 2 ) 慢得多,后者比 O(n 3 )增长慢得多,依此类推。
我不明白: k 和 n 0如何符合这个定义。
什么是 n 0?具体来说,为什么n有下标0,这个下标是什么意思?
回答问题 1 后,“大小为 n >= n 0 的问题”是什么意思?更大的数据集?更多的循环重复?问题规模越来越大?
那什么是k呢?为什么 k 乘以 f(n)?k 与增加问题规模 - n 有什么关系?
我已经看过了:
1) n > n 0 - 意味着我们同意对于小 n A 可能需要不止 k*f(n) 次操作。例如。对于非常小的输入,冒泡排序可能比快速排序或归并排序快。选择 0 作为下标完全是由于作者的偏好。
2) 更大的输入尺寸。
3) k 是一个常数。假设一种算法对大小为 n 的输入执行 1000*n 次操作,则为 O(n)。对于大小为 n 的输入,另一种算法需要 5*n^2 次操作。这意味着对于大小为 100 的输入,第一个算法需要 100,000 个操作,第二个需要 50,000 个操作。因此,对于大约 100 的输入大小,您最好选择第二个,尽管它是二次的,而第一个是线性的。在下图中,您可以看到 n 0 = 200,因为只有当 n 大于 200 时,二次函数才会变得比线性更昂贵(这里我假设 k 等于 1)。
归档时间: |
|
查看次数: |
2365 次 |
最近记录: |