分治算法主定理
分治算法通常遵守一种通用模式:即:在解决规模为 n 的问题时,总是先递归地求解 a 个规模为 nb 的子问题,然后在 O(nd) 时间内将子问题的解合并起来,其中 a,b,d>0 是一些特定的整数。分治算法的运行时间可以通过公式:
T(n)=aT(⌈nb⌉)+O(nd)
得出。以下将给出这类一般递推式的一个封闭解,以便由于遇到新的问题时,无需重新求解。
主定理(还存在更一般的结果):如果对于常数 a>0 、 b>1 以及 d≥0 ,有 T(n)=aT(⌈nb⌉)+O(nd) 成立,则:
T(n)=⎧⎩⎨⎪⎪O(nd)O(ndlog2n)O(nlogba)d>logbad=logbad<logba
譬如:归并排序的时间复杂度为 T(n)=2T(⌈n2⌉)+O(n1)
那么 a=2 , b=2 , d=1 ,则 d=1=logba=1 ,由主定理可知 T(n)=O(ndlog2n)=O(nlog2n)