例如,我有一个程序的f(N)=5N+3我想知道这个函数有多大我们说高阶项o(n)。这是通过删除低阶项和常数来找到任何程序的大(oh)值的正确方法吗?如果我们通过简单地查看复杂性函数5n+3得到O(n)。那么,这个公式F(N)我知道,这个公式只是用来比较两个函数我的问题是,在这个公式中,f(n)我学过很多书,也学过很多帖子,但我仍然面临困惑。 最佳答案 问:这个方法可以通过删除来找到任何程序的大(oh)值吗低阶项和常数?是的,至少有一些检查时间复杂度的人使用这种方法。问:如果我们通过简单地查看复杂性函数5n+3得到O(n)。那么,这个公式F(N)正式证明你正确估计了某个算法的大oh假设你有F(N) = 5N^2 + 10和(不正确的)结论,这个例子的大的OH复杂性是O(N)。通过使用这个公式,您可以快速地看到这不是真的,因为不存在常量C这样,对于N持有的大值。这意味着5N^2 + 10 <= C * N,但是不管你选择的常数有多大,总有C >= 5N + 10/N大于这个常数,所以这个不等式不成立。问:在这个公式中,f(n)上界G(N)它是从哪里来的我们从哪里取?它来自于检查,特别是通过找到它的最高阶项。你应该有一些数学知识来估计哪个函数的增长速度比另一个快,开始检查这个useful link。有几个类的复杂性-常数,对数,多项式,指数…然而,在大多数情况下,很容易找到任何函数的最高阶项如果不确定,可以绘制函数的图形,或者正式证明一个函数的增长速度比另一个快例如,如果乍一看可能不清楚什么是最高阶项,但是如果计算或绘制N=1、10和1000的C和相同值的N,很明显F(N)增长得更快,所以这个函数的大oh是F(N) = log(N^3) + sqrt(N)。
10-06 05:21