计算在给定特定输入大小的情况下算法运行所需的时间

时间:2017-04-19 13:58:11

标签: algorithm time-complexity big-o

我正在修改题为"算法和科学计算的考试"并且对于如何解决这个问题一无所知,这是来自过去的试卷。我知道一个复杂度为O(3 ^ n)复杂度的算法,每增加一个新元素,并且O(n ^ 3)复杂度的算法与n的立方成正比,但我不知道如何使用那些信息来回答这个问题。这是一个问题,我非常感谢任何帮助。感谢。

算法A1和A2在^ 3和O3 ^上分别具有复杂性。在大小为n = 10,000的输入上,两个算法在完全相同的时间t = 10秒内运行。您希望每个算法在大小输入上花费多少时间 一世。 n = 9,990 ii。 n = 30,000

2 个答案:

答案 0 :(得分:4)

如果我们迂腐,我们可以说问题不明确。

当声明算法在O(f(n))类中时,意味着存在ak使得其运行时间上限由k·f(n) 。我们只给出了单个n值的执行时间,它没有提供太多约束,实际上两个算法都可以在O(1)中(它是O的一个子集(3 n ))和O(n 3 )类函数),所以一个有效的答案是两个算法总是以10秒的恒定时间运行。

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

实际上,当指定算法的复杂性类时,意图是提供的边界尽可能紧密。这就是我们应该在这里假设的,以便明确定义这个问题。

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

时间 1 (n)〜= k 1 ·n 3

时间 2 (n)〜= k 2 ·3 n

使用提供的信息,我们可以找到k 1 和k 2

10 =时间 1 (10000)= k 1 ·10000 3 => k 1 = 10/10 12 = 10 -11

10 =时间 2 (10000)= k 2 ·3 10000 => k 2 = 10/3 10000

使用k 1 和k 2 的这些值,我们可以计算任何其他n值的时间,通过在公式中将它们替换为时间 1 < / sub>(n)和time 2 (n)。

答案 1 :(得分:0)

这对我来说是不现实的,因为这两种算法都花费了10秒的时间,即n = 10000。话说回来。这是我尝试将其计算机化的方法。

K *(n1)^ 3 = 10秒   K *(n2)^ 3 = x 其中K是与机器有关的常数,与数据大小无关。 x =(n2 / n1)^ 3 * 10sec = 9.99sec

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