【问题标题】:How do I find the running time given algorithm speed and computer speed?如何在给定算法速度和计算机速度的情况下找到运行时间?
【发布时间】:2008-10-19 19:23:25
【问题描述】:

我目前正在处理一项涉及 Big-O 和运行时间的任务。我向我提出了一个似乎很容易的问题,但我不确定我是否做得正确。其余的题都比较难,感觉这里漏了点什么。

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

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

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

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

不过,这让我感觉很奇怪,因为它说“运行时间”是 50n^3,而不是“操作数是 50n^3”,所以我觉得我在乘以时间, 并且会以毫秒为单位结束,这似乎完全不正确。

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

【问题讨论】:

  • 只是想指出您从描述中的 50n^3 到计算中的 50n^2。不用说,这会对您获得的结果产生很大影响。

标签: performance complexity-theory


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    所以乘以每次操作的时间,你就会得到所需的时间。

    我觉得很合适。

    【讨论】:

      【解决方案3】:

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

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

      希望这能给单位带来一些意义,
      阿萨夫。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-20
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多