算法边界和描述算法的函数

时间:2015-03-05 00:16:09

标签: algorithm big-o

好吧所以基本上我需要了解我如何比较功能,以便我可以找到大O大theta和大omega的程序算法

我的数学背景不是很强,但我有基础

我的问题是

是否有一种数学方法可以找到两个函数相交的位置,最终一个函数从某个点开始支配另一个函数n

例如,如果我有一个功能

2n ^ 2和64nlog(n)[以log为基数2]

我怎样才能找到n,2n ^ 2的上限值(希望我在这里使用正确的术语)64nlog(n)以及如何将其应用于任何其他函数

只是猜测工作吗?

4 个答案:

答案 0 :(得分:0)

你只需要找到这两个函数的截距。因此,将它们设置为彼此相等并求解n。或者只是绘制它们并大致了解截距,以便了解应在每种算法之间切换的数据大小。此外,Wolfram Alpha也有有用的函数求解和绘图工具,以防你在数学上有点生疏。

答案 1 :(得分:0)

Big O,Big Theta和Big Omega是关于算法的一般增长模式。每种算法都可以以无限多种方式实现。每个实现可能具有特定的执行时间,该时间与算法的Big O有关。您可以比较算法的两个实现的每个输入大小的执行时间,但不能比较算法本身。 Big O,Big Theta和Big Omega对算法的执行时间几乎一无所知。因此,您甚至无法猜测一个算法变得更快的特定交叉点,因为这样的概念毫无意义。我们可以在理论上讨论交叉点,但不能详细讨论交叉点,因为它对算法没有价值,只有实现。

同样重要的是要注意Big O(和类似的)没有像你的函数那样的常数因素。

http://en.wikipedia.org/wiki/Big_O_notation

答案 2 :(得分:0)

你可以在两边划分n,并在公共因子2上划分,然后解决这个问题:

32 log(n) <= c n  for n >= n_0

我们说c = 32,因为它是log(n) <= n(看起来不错),n_0可以是1.

但是这种事情已经完成了。除非你是CS类,否则你可以说O(n log n)是O(n 2 )的一个子集而没有证明它,无论如何它都是众所周知的。

答案 3 :(得分:0)

对于big-O,big-Theta和big-Omega,你不必找到交叉点。你必须证明一个函数最终支配另一个函数(直到常数因子)。例如,一个有用的工具是L'Hopital的规则:取两个运行时间函数的比率并计算极限,因为n变为无穷大,如果极限是无穷大/无穷大,那么你可以应用L'Hopital的规则得到这个比例的极限等于衍生物比例的极限,有时得到一个解决方案。例如,这表明对于任何c> 1,log(n)= O(n ^ c)。 0