4

我目前正在完成一项处理 Big-O 和运行时间的任务。我向我提出了一个似乎很容易的问题,但我不确定我是否做得正确。其余的问题都相当困难,我觉得我在这里忽略了一些东西。

首先,你有这些东西:算法 A,它的运行时间为 50n^3。计算机 A,每次操作的速度为 1 毫秒。计算机 B,每次操作的速度为 2 毫秒。大小为 300 的实例。

我想知道算法 A 在计算机 A 上解决这个实例需要多长时间,以及在计算机 B 上需要多长时间。

我想要做的是低于 300 的 n,所以你有 50*(300^2) = 4500000。

然后,将第一台计算机乘以 1,第二台计算机乘以 2。

不过,这对我来说很奇怪,因为它说“运行时间”是 50n^3,而不是“操作次数是 50n^3”,所以我觉得我在乘以时间,并且会最终以毫秒平方为单位,这似乎根本不对。

我想知道我是否正确,如果不是,这个问题的实际含义是什么。

4

3 回答 3

2

如果您有 O(n^3) 但您在示例中没有使用大 O 表示法,那将没有意义。即如果你有 O(n^3) 你会知道你的算法的复杂性,但你不会知道你所说的确切的操作数量。

相反,它看起来好像为您提供了所执行的操作的确切数量。(即使知道它没有明确说明)。所以用 n 代替是有意义的。

大 O 表示法描述了输入的大小将如何影响您的运行时间或内存使用情况。但是对于 Big O,即使考虑到每个操作的速度,您也无法推断出准确的运行时间。

解释为什么您的答案看起来如此简单(如上所述)也是一种安全的方法。但我敢肯定,即使没有它,你也会得到这个问题的分数。

于 2008-10-19T19:33:35.490 回答
1

好吧,除了弄清楚在大多数现代计算机上以这种方式需要多长时间是毫无意义的,尽管它可能在嵌入式系统中具有一定的意义,但在我看来,你这样做的方式确实是正确的。

如果算法需要 50n^3 次操作来完成某事,其中 n 是要处理的元素数,那么用 300 代替 n 将为您提供要执行的操作数,而不是时间单位。

因此,乘以每次操作的时间,您将获得所需的时间。

在我看来是对的。

于 2008-10-19T19:33:35.957 回答
0

您的 50*n^3 数据称为“运行时间”,但这是因为用于速度评估的模型假设一台机器具有几个基本操作,其中每个操作都需要 1 个时间单位。

在您的情况下,运行算法需要 50*500^3 时间单位。在计算机 A 上每个时间单位是 1ms,在计算机 B 上是 2ms。

希望这能给单位带来一些意义,
Asaf。

于 2008-10-19T19:44:08.730 回答