T(n)=n!/((n-k)!) 求时间复杂度O()

1个回答

  • 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数.记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度.

    在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同,但时间复杂度相同,都为O(n^2).

    按数量级递增排列,常见的时间复杂度有:

    常数阶O(1),对数阶O(log(2)n),线性阶O(n),

    线性对数阶O(nlog(2)n),平方阶O(n^2),立方阶O(n^3),...,

    k次方阶O(n^k),指数阶O(2^n).随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低.

    算法的时间复杂度

    若要比较不同的算法的时间效率,受限要确定一个度量标准,最直接的办法就是将计算法转化为程序,在计算机上运行,通过计算机内部的计时

    功能获得精确的时间,然后进行比较.但该方法受计算机的硬件、软件等因素的影响,会掩盖算法本身的优劣,所以一般采用事先分析估算的算法,

    即撇开计算机软硬件等因素,只考虑问题的规模(一般用用自然数n表示),认为一个特定的算法的时间复杂度,只采取于问题的规模,或者说它是

    问题的规模的函数.

    为了方便比较,通常的做法是,从算法选取一种对于所研究的问题(或算法模型)来说是基本运算的操作,以其重复执行的次数作为评价算法时间

    复杂度的标准.该基本操作多数情况下是由算法最深层环内的语句表示的,基本操作的执行次数实际上就是相应语句的执行次数.

    一般 T(n)=O(f(n))

    O(1)