我有一个做O(n)工作的算法,摆脱了 输入的恒定分数1 / k(k> 2),并递归地调用自身 还剩下什么。该算法可以用来描述 T(n)= T(((k-1)/ k)* n)+ O(n)。如何计算T(n)的闭合形式。
答案 0 :(得分:3)
您可以直接展开它: T(n)= T(((k-1)/ k)^ 2 * n)+ O(((k-1)/ k)* n)+ O(n)等等
注意,n *((k-1)/ k)是n /(k /(k-1)),其暗示分母> 1.
因此,它是一个几何级数,收敛于和/(1 - (k - 1)/ k)= n * k。
因此,如果k是常数,则T(n)= O(n * k)为O(n)。
答案 1 :(得分:1)
您可能希望了解主定理,这是分析此类问题的便捷方法:http://en.wikipedia.org/wiki/Master_theorem
您的算法将属于案例3,与外部工作相比,递归工作可以忽略不计。