主定理学习笔记

    科技2023-09-10  108

    主定理是分析分治算法复杂度的一个工具。 设分治的时间复杂度为 T ( n ) T(n) T(n),其中 n n n 为数据规模,且满足递推式: T ( n ) = a T ( n b ) + O ( n d ) T(n)=aT(\dfrac nb)+O(n^d) T(n)=aT(bn)+O(nd) 则有 T ( n ) = { O ( n d ) log ⁡ b a < d O ( n d log ⁡ b n ) log ⁡ b a = d O ( n log ⁡ b a ) log ⁡ b a > d T(n)=\begin{cases}O(n^d)&&&\log_ba<d\\O(n^d\log_bn)&&&\log_ba=d\\O(n^{\log_ba})&&&\log_ba>d\end{cases} T(n)=O(nd)O(ndlogbn)O(nlogba)logba<dlogba=dlogba>d


    推导: 不妨暴力展开柿子,得到: T ( n ) = O ( n d + a ( n / b ) d + a 2 ( n / b 2 ) d + ⋯   ) = O ( n d ) ∑ k = 0 log ⁡ b n ( a b d ) k \displaystyle T(n)=O(n^d+a(n/b)^d+a^2(n/b^2)^d+\cdots)=O(n^d)\sum_{k=0}^{\log_bn}\left(\dfrac a{b^d}\right)^k T(n)=O(nd+a(n/b)d+a2(n/b2)d+)=O(nd)k=0logbn(bda)k a b d < 1 \dfrac a{b^d}<1 bda<1 时,即 d > log ⁡ b a d>\log_ba d>logba T ( n ) = O ( n d ) T(n)=O(n^d) T(n)=O(nd) d = log ⁡ b a d=\log_ba d=logba 时, T ( n ) = O ( n d log ⁡ b n ) T(n)=O(n^d\log_bn) T(n)=O(ndlogbn) d > log ⁡ b a d>\log_ba d>logba 时, T ( n ) = O ( n d ( a b d ) log ⁡ b n ) = O ( n d a log ⁡ b n b − d log ⁡ b n ) = O ( n log ⁡ b a ) T(n)=O\left(n^d\left(\dfrac a{b^d}\right)^{\log_bn}\right)=O(n^da^{\log_bn}b^{-d\log_bn})=O(n^{\log_ba}) T(n)=O(nd(bda)logbn)=O(ndalogbnbdlogbn)=O(nlogba)

    Processed: 0.184, SQL: 8