算法分析/比较具有不同增长率的函数的运行时间

时间:2013-10-05 06:43:18

标签: algorithm math big-o time-complexity

我有一个家庭作业问题:

如果输入大小为100,算法需要0.5 ms,如果输入为500,1,000和10,000,则需要多长时间:

  1. 线性,
  2. O(N log N),
  3. Quadratic,
  4. Cubic,
  5. 指数。
  6. 我理解这里的基本概念,我只是不确定如何以数学方式处理这个问题。我很想简单地计算处理每个输入项所花费的时间(例如,在a中)我将0.5除以100得到.05,然后我将乘以500,1000和1000,以找出处理这些大小的输入所需的时间。

    虽然这对于线性计算来说很简单,对于二次和三次也很简单,但我不太明白如何将此策略应用于(N log N)或指数函数:我使用什么值作为指数的基数?

    对于(N log N),它是否像计算c = 100 * log(100)= 200一样简单;然后计算c = 500 * log(500)= 1349,这是6.745乘以200,然后乘以6.745乘以.5到达3.3725作为最终答案?

2 个答案:

答案 0 :(得分:1)

这是一个糟糕的练习:

  • 它教您从单个数据点推断。
  • 它教您将渐近分析的结果应用到无法应用的位置。

为了扩展后者,由于隐藏的术语,在给定基于渐近界限的特定输入时,无法预测系统的性能。许多算法都隐藏了常量和线性项,这些术语主导了n = 100等小输入大小的运行时间。

但如果您应该忽略这些事实,那么您的方法是正确的。

答案 1 :(得分:0)

假设函数的运行时由T(n)给出。您可以通过执行以下操作来解决这些问题:

  1. 根据函数的增长率,写出T(n)的一般表达式,因为有一些隐藏的常数乘数。例如,对于n log n情况,写一些常数c的T(n)= c n log n。

  2. 使用您拥有的一个数据点解决c; T(100)给你。

  3. 根据需要插入n的值来估算运行时间。

  4. 这适用于任何增长率。

    快速说明:“指数”不够精确,无法进行有意义的估算。 2 ^ n和100 ^ n都是指数但后者的增长速度明显快于前者。在计算机科学中,通常日志使用基数2,尽管没有指数的一般约定。

    希望这有帮助!