如何计算运行时间算法中类似效率的N值?

时间:2016-01-21 20:14:56

标签: algorithm performance

我试图了解运行时间的计算,然而,我已陷入僵局。如果你有两个功能,比如说

    (N^3 + 2N^2 + 6N + 3)

    (6N^2 + 4N + 10)

如何找到两个算法达到相同效率的N值?我宁愿不给出实际价值,但如何解决问题。我为N ^ 3和6N ^ 2插入0,1,4,10和67(给出的选项),但在每种情况下N ^ 3总是更小(当然除了0)。我做错了吗?

3 个答案:

答案 0 :(得分:5)

是的,你做错了。更准确地说,你尝试做的是不正确的,至少是使用big-O表示法。

首先,big-O表示法除了多项式的最高阶部分之外的所有部分,所以你的两个例子是正确的O(N 3 )和O(N 2 < / sup>)。当N接近无穷大时,Big-O符号与行为有关。

基于此,我们很快就会发现,大O符号(一般而言)根本不适合您正在尝试的工作。现在,也许你使用O这里真的是错误,你的意思是在第一种情况下,时间与N 3 + 2N 2 成正比+ 6N + 3,在第二种情况下为6N 2 + 4N + 10.

如果是这种情况,那么你只需要求解两个多项式相等的点:

N 3 + 2N 2 + 6N + 3 = 6N 2 + 4N + 10

......然后我们将其转换为:

N 3 - 4N 2 + 2N - 7 = 0

从那里开始,只需要用简单的代数来解决N.

N(N 2 -4N + 2)= 7

在这种情况下,我倾向于假设低阶项变得越来越近似,所以(例如)当你达到常数项时(即,那个没有&#39)完全涉及N)它确实非常近似。因此,在解决N时,我可能不会非常担心这些术语的准确性。基于此,我们可以将上面的等式转换为:

N(N-2)(N-2)= 7

然后我再欺骗一些并观察我们将N-2作为两个因子,N作为第三个因子,所以N是围绕 7 +的立方根的某处因为其中一个因素实际上是N而不是N-2,我们知道它不是相当正确,但实际上N只能是一个整数,所以它可能足够接近。如果要检查,可以将3,4和5插入原始多项式,并计算值。我的猜测是,对于3,你会在一个方向上得到差异,而在另一个方向得到5,而4的差异小于3或5。

四是这些多项式的数学的粗略近似。在现实生活中可能无法解决这个问题。考虑到多项式的程度不同,对于真正的收支平衡点而言,它不会特别令人惊讶 - 它可能很容易为3或5,甚至可能是2或6. I,对于一个人来说,如果它像100或甚至50甚至50那么大,真的会非常惊讶。这就是为什么我并不担心在原始计算中特别精确的原因。

我应该补充一点,在大多数实际案例中,你不要从几乎与&#34; N 3 + 2N 2 + 6N一样精确的事情开始+ 3&#34;无论是。实际上,在测量中经常会产生足够的噪声,甚至难以确定多项式的最重要项是什么。例如,考虑一下我在previous answer中展示的关于快速排序所需时间的一些实际数据。这是一种多年来一直在研究(和测试)的算法,因此,它的预期运行时间大约是N log N,这是一个很小的真正问题。尽管如此,基于原来我曾经在那篇文章中绘制图形,很难确定它确实是N log N而不是线性。

因此,我警告说,根据我的估计,这个问题的基础是相当可疑的(即使最好),除非是纯粹的智力练习。

答案 1 :(得分:2)

你问这个问题的方式(&#34;算法具有相同的效率和#34;)表明存在误解:如果你有两个算法,那么你可以用O(f1(N)描述它们各自的复杂性))和O(f2(N)),其中f1和f2都是取决于N的项。然而,这并不意味着对于其中f1(N)= f2(N)的N的值是实现两个算法将花费相同(甚至接近)的时间进行计算:对于任何给定的N,实际计算时间仍然可以随任意量变化.O(N)表示法仅描述渐近时间复杂度,这意味着,当N向无穷远方向发展时,会产生哪些计算时间。

答案 2 :(得分:0)

将两个多项式等同并求解N以评估两个程序何时具有相同的效率(对于N)