为nlog(n)和n计算n!当时间是1秒。 (算法需要f(n)微秒)

时间:2016-10-07 07:43:41

标签: algorithm big-o clrs

从CLRS算法书中给出以下问题。

  

对于下表中的每个函数f(n)和时间t,确定   假设,在时间t内可以解决的问题的最大尺寸n   解决问题的算法需要f(n)微秒。

  1. 当时间为1秒时,如何计算f(n)= nlog(n)的n?
  2. 如何为f(n)= n计算n!什么时候是1秒?

2 个答案:

答案 0 :(得分:0)

提到算法需要f(n)微秒。然后,可以认为该算法由f(n)个步骤组成,每个步骤需要1微秒。

给出的问题表明相关的f(n)值受1秒的约束。 (即10 6 微秒)然后,既然你正在寻找最大的n来满足这些条件,你的问题归结为下面给出的不等式。

1) f(n)= nlog(n)< = 10 6

2) f(n)= n! < = 10 6

其余的,我相信,主要是用代数和对数方程来找到相关的值。

答案 1 :(得分:0)

在第一种情况下,您可以参考Example of newtons method to calculate cube root牛顿法来近似根或Lambert W Function。这可能有助于计算n的值。根据我的发现,大多数情况下没有其他分析方法可以帮助您。

在第二种情况下,python脚本可以通过手动操作来帮助计算n。

def calFact(n):
    if(n == 0 or n==1):
        return n
    return n*calFact(n-1)

nVal=1
while(calFact(nVal)<1000000):         # f(n) = n! * 10^-6 sec
    nVal=nVal+1                       # 10^6 = n!

print(nVal)

因此,在这种情况下,我们试图找出n这样n!等于或接近10 ^ 6。