Algorithm 计算给定特定输入大小的算法运行所需的时间

Algorithm 计算给定特定输入大小的算法运行所需的时间,algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,我正在复习题为“算法和科学计算”的考试,对如何做这道题几乎一无所知,这是以前的一篇试卷。我知道一个复杂度为O(3^n)的算法,每增加一个新元素,其复杂度就会增加三倍,而复杂度为O(n^3)的算法则与n的立方成正比,但我不知道如何利用这些信息来回答这个问题。这是一个问题,我非常感谢任何帮助。谢谢 算法A1和A2分别在^3和O3上具有复杂性。对于大小为n=10000的输入,两种算法在完全相同的时间t=10秒内运行。您希望每个算法在输入大小时花费多少时间 我n=9990 ii。n=30000如果我们是

我正在复习题为“算法和科学计算”的考试,对如何做这道题几乎一无所知,这是以前的一篇试卷。我知道一个复杂度为O(3^n)的算法,每增加一个新元素,其复杂度就会增加三倍,而复杂度为O(n^3)的算法则与n的立方成正比,但我不知道如何利用这些信息来回答这个问题。这是一个问题,我非常感谢任何帮助。谢谢

算法A1和A2分别在^3和O3上具有复杂性。对于大小为n=10000的输入,两种算法在完全相同的时间t=10秒内运行。您希望每个算法在输入大小时花费多少时间
我n=9990 ii。n=30000

如果我们是学究,我们可以说这个问题没有得到明确的说明

当一个算法被称为O(f(n))类时,这意味着存在一个k,使得其运行时间上界k·f(n)。我们只给出了单个n值的执行时间,这不提供太多约束,在实践中,两种算法都可以是O(1)(这是O(3n)和O(n3)类函数的子集),因此一个有效的答案是两种算法总是在10秒的恒定时间内运行

这可能就是问题看起来比实际困难的原因。否则,通过做出一些标准假设(如答案的下一部分所示),就变得简单了


在实践中,当一个人指定一个算法的复杂度类别时,其目的是使所提供的边界尽可能紧密。这就是我们应该在这里假设的,使这个问题得到很好的定义

因此,我们假设这两种算法的运行时间如下:

时间1(n)~=k1·n3

时间2(n)~=k2·3n

使用提供的信息,我们可以找到k1和k2

10=时间1(10000)=k1·100003=>k1=10/1012=10-11

10=时间2(10000)=k2·310000=>k2=10/310000


使用k1和k2的这些值,我们可以计算任何其他n值的时间,方法是将它们代入time1(n)和time2(n)的公式中。

对于我来说,这两种算法对于n=10000都需要10秒是不现实的。话虽如此。下面是我将如何尝试用计算机处理这个问题

K*(n1)^3=10秒 K*(n2)^3=x 其中K是独立于数据大小的机器相关常数。 x=(n2/n1)^3*10秒=9.99秒

对O(3^N)应用相同的原理
它给出10/3^10秒。它非常小。

Big-O表示法描述了当
n
接近无穷大时复杂性的极限。对于足够小的
n
,通常需要考虑其他因素才能获得准确的运行时间。在你的情况下,你可能会忽略其他因素,但其他因素可能不会如此幸运。可能的重复要小心复杂性:很容易写出一个丑陋的反例
t=1e-100*n**3+10
。当
n=10000
时,该算法具有
O(n**3)
复杂度和时间
t=10
。然而,
t=10
(相同)对于
n=9990
以及
n=30000
…确实如此,但这正是我回答的第一部分的要点——没有一些假设,实际上有无限多的解决方案。