归并排序的复杂度

根据递归方程求解:

T ( n ) = 2 T ( n 2 ) + 2 n T(n) = 2T( \frac{n}{2}) + 2n T(n)=2T(2n)+2n

T ( n 2 ) = 2 T ( n 4 ) + 2 n 2 T(\frac{n}{2}) = 2T( \frac{n}{4}) + 2\frac{n}{2} T(2n)=2T(4n)+22n

T ( n 4 ) = 2 T ( n 8 ) + 2 n 4 T(\frac{n}{4}) = 2T( \frac{n}{8}) + 2\frac{n}{4} T(4n)=2T(8n)+24n

T ( n 8 ) = 2 T ( n 16 ) + 2 n 8 T(\frac{n}{8}) = 2T( \frac{n}{16}) + 2\frac{n}{8} T(8n)=2T(16n)+28n

. . . ... ...

T ( 2 ) = 2 T ( 1 ) + 4 T(2) = 2T( 1) + 4 T(2)=2T(1)+4

T ( 1 ) = 1 T(1) = 1 T(1)=1

上述式子共有 log ⁡ 2 n \log_2n log2n项。

考虑:

  1. 因为每一项都取决于前一项,将T(1)带入T(2), T(2)带入T(4)…T(n/2) 带入T(n)后,第一部分总共有 log ⁡ 2 n \log_2n log2n个2相乘, 因此第一部分值为 2 log ⁡ 2 n = n 2^{\log_2n} = n 2log2n=n
  2. 第二部分为: 2 n + 2 n + 2 n + . . + 2 n 2n + 2n + 2n + .. + 2n 2n+2n+2n+..+2n,且总共有 log ⁡ 2 n \log_2n log2n项, 和为 2 n log ⁡ 2 n 2n\log_2n 2nlog2n
  3. 总共的时间复杂度为: n + 2 n log ⁡ 2 n = O ( n log ⁡ 2 n ) n + 2n\log_2n = O(n\log_2n) n+2nlog2n=O(nlog2n)

堆排序、非极限情况下的快速排序和归并排序的计算方法类似,时间复杂度都是 O ( n log ⁡ 2 n ) O(n\log_2n) O(nlog2n).

汉诺塔(Hanoi)的递推方程为T(n) = 2T(n-1),分治后问题规模减1,层层带入后所得的时间复杂度为 2 n − 1 , 即 O ( 2 n ) 2^n-1, 即O(2^n) 2n1,O(2n)

你可能感兴趣的:(数据结构和算法,算法)