我有一个家庭作业问题:
如果输入大小为100,算法需要0.5 ms,如果输入为500,1,000和10,000,则需要多长时间:
我理解这里的基本概念,我只是不确定如何以数学方式处理这个问题。我很想简单地计算处理每个输入项所花费的时间(例如,在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作为最终答案?
答案 0 :(得分:1)
这是一个糟糕的练习:
为了扩展后者,由于隐藏的术语,在给定基于渐近界限的特定输入时,无法预测系统的性能。许多算法都隐藏了常量和线性项,这些术语主导了n = 100等小输入大小的运行时间。
但如果您应该忽略这些事实,那么您的方法是正确的。
答案 1 :(得分:0)
假设函数的运行时由T(n)给出。您可以通过执行以下操作来解决这些问题:
根据函数的增长率,写出T(n)的一般表达式,因为有一些隐藏的常数乘数。例如,对于n log n情况,写一些常数c的T(n)= c n log n。
使用您拥有的一个数据点解决c; T(100)给你。
根据需要插入n的值来估算运行时间。
这适用于任何增长率。 p>
快速说明:“指数”不够精确,无法进行有意义的估算。 2 ^ n和100 ^ n都是指数但后者的增长速度明显快于前者。在计算机科学中,通常日志使用基数2,尽管没有指数的一般约定。
希望这有帮助!