我对如何确定一种功能比另一种功能快还是慢有疑问。如果教授使用O(1)和O(n)的例子,我知道O(1)更快,但是我真的只知道通过记住简单的函数运行时间顺序...但是如果给出更复杂的例子,我不明白如何找到更快的功能。
例如,假设我要比较n ^ logn和n ^(logn)^ 2和n ^(sqrt(n))。如何比较这些功能,并能够确定运行时间最快和最慢的时间(big-O表示法)?有没有每次我都可以遵循的分步过程,以便在比较函数运行时间时可以使用?
这是我对以上示例的看法。我知道n ^ 2比n ^ 3快。所以我想比较每个函数的n ^ ____。因此,如果我分别插入n = 1000000,则logn将具有最小的值,logn ^ 2将具有第二个值,而logn ^ sqrt(n)将具有最大的值。这是否意味着最小值(n ^ logn)将是最快的,最大值(n ^ sqrt(n))将是最慢的?1. n ^ logn(最快)2. n ^ logn ^ 2 3. n ^ sqrt(n)(最慢)
通常将Big O写为N的函数(常数为O(1)的情况除外)。
因此,只需将任何N个(3或4个值,或者最好是足够的值以查看曲线)插入要比较和计算的两个函数即可。如果可以,请绘制它们的图形。
但是您不必这样做,您应该对Big O的函数类有基本的了解。如果无法计算,您仍然应该知道O(log N)大于O(1)等等。O符号表示最坏的情况。因此,如果您熟悉最常用的功能,通常比较起来很容易。
这是否意味着最小值(n ^ logn)将是最快的,最大值(n ^ sqrt(n))将是最慢的?1. n ^ logn(最快)2. n ^ logn ^ 2 3. n ^ sqrt(n)(最慢)
出于比较目的,是的。O表示法用于比较最坏情况,复杂度或算法类别,因此您仅假设比较中所有候选对象都出现最坏情况。您无法从O标记中分辨出最佳,典型或平均性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句