Teorema Master se poate aplica pe recurente de forma: $ T(n) = a * T(\frac n b) + f(n); a \ge 1; b > 1 $ In functie de $ f(n) $ apar urmatoarele cazuri:
  1. $ f(n) = \Theta(n^c) ; c < \log_ba $                                  $ \Rightarrow T(n) = \Theta(n^{\log_ba}) $
  2. $ f(n) = \Theta(n^c * \log^kn); k >= 0; c = \log_ba $     $ \Rightarrow T(n) = \Theta(n^{\log_ba}*\log^{k+1}n) $
  3. $ f(n) = \Theta(n^c); c > \log_ba $                                  $ \Rightarrow T(n) = \Theta(f(n)) $

1.

  • $ T_1(n) = 4T_1(\frac n 4) + 1 $

$ a = 4; b = 4; f(n) = 1; \log_ba = \log_44 = 1 $
Aceasta recurenta intra in cazul 1 al teoremei master, deci $ T_1(n) = \Theta(n^{\log_ba}) = \Theta(n^{\log_44}) = \Theta(n) $

  • $ T_2(n) = 4T_2(\frac n 2) + n^2 $

$ a = 4; b = 2; f(n) = n^2; \log_ba = \log_24 = 2 $
Aceasta recurenta intra in cazul 2 al teoremei master cu $ k = 0 $, deci $ T_2(n) = \Theta(n^{\log_ba} * \log^{k+1}n) = \Theta(n^2 \log n)$

  • $ T_3(n) = 8T_3(\frac n 2) + 2n^4 $

$ a = 8; b = 2; f(n) = 2n^4; \log_ba = \log_28 = 3 $
Aceasta recurenta intra in cazul 3 al teoremei master, deci $ T_3(n) = \Theta(n^c) = \Theta(n^4)$

2.

Codul reprezinta un algoritm de cautare binara. La fiecare pas se apeleaza recursiv functia pe jumatate din array-ul curent pana se gaseste valoarea sau pana sea ajunge la un subarray de dimensiune 1. Cazul worst case este de cautare a unei valori care nu exista, caz in care se va merge pana la cazul de baza (n = 1). La fiecare apel recursiv se fac doar cateva verificari in timp constant (presupunem ca indexarea array-ului se face in timp constant).

Teorema Master
Relatia de recurenta e urmatoarea: $ T(n) = T(\frac n 2) + \Theta(1) $

Aceasta recurenta face parte din cazul 2 al teoremei master ( $ \log_ba = 0, f(n) = n^0 * \log^0(n) $ ), deci $ T(n) = \Theta(n^0 * \log^1n) = \Theta(\log(n)) $

Substitutie
Presupunem $ T(\frac n 2) = \Theta(log \frac n 2) $ si incercam sa demonstram ca $ T(n) = \Theta(\log n) $

$ \exists c_1, c_2 > 0 $ astfel incat:
$ c_1 \log \frac n 2 \le T(\frac n 2) \le c_2 \log \frac n 2 $        $| +c$
$ c_1 \log \frac n 2 + c \le T(\frac n 2) + c \le c_2 \log \frac n 2 + c $        $| +c$
$ c + c_1 \log n - c_1 \log 2 \le T(n) \le c + c_2 \log n - c_2 \log 2$

Alegem $ c, c_1, c_2 $ astfel incat $ c_1 \log 2 \leq c \leq c_2 \log 2 $, deci $ c - c_1 \log 2 \ge 0 $ si $ c - c_2 \log 2 \le 0 $ :

$ c_1 log\ n \le c + c_1 log\ n - c_1 log\ 2 \le T(n) \le c + c_2 log\ n - c_2 log\ 2 \le c_2 log\ n $ $ \Rightarrow T(n) = \Theta(log\ n) $

Arbore
Nivelul 0 contine $ T(n) + c $ si are un singur nod fiu. Fiercare nivel urmator $ h $ contine $ T(\frac n {2^h}) + c $. $ h $ este de ordinul $ log\ n $. Deci recurenta se calculeaza ca $ \sum_{i=0}^{h-1}{c} + \#_{frunze} * T(1) = \sum_{0}^{log\ n}{c} + T(1) = \Theta(log\ n) $

3.

  • $ T_a(n) = 2T_a(n-1) + 1$

nu se poate aplica master

  • $ T_b(n) = T_b(n-1) + 1$

nu se poate aplica master
Prin metoda arborelui obtinem n nivele continand cate o constanta si un nod, deci $ T_b(n) = n * \Theta(1) = \Theta(n) $.

  • $ T_c(n) = 2T_c(n/2) + \log(n)$

nu se poate aplica master deoarece f(n) este de forma $ \log n $ si $ c \ne \log_ba $ (deci nu e acoperit de niciunul din cele 3 cazuri)

Presupunem $ T(\frac n 2) = \Theta(\frac n 2) $
$ \exists c_1, c_2 > 0 $ a.i.
$ c_1 \frac n 2 \le T(\frac n 2) \le c_2 \frac n 2 \ \ \ \ | *2 $
$ c_1 * n \le 2 * T(\frac n 2) \le c_2 * n \ \ \ \ | + \log n $
$ c_1 * n + \log n \le T(n)\le c_2 * n + \log n $
$ T(n) \in \Theta(n) $

  • $ T_d(n) = T_d(n/9) + T_d(8n/9) + n$

nu se poate aplica master

Desenand arborele, obtinem unele ramuri care se termina mai repede, altele mai incet, asa ca vom incadra timpul lui T intre 2 limite, $ S_1 $ si $ S_2 $

$ h_1 = \log_9n, h_2 = \log_{\frac 9 8}n $

$ S_1 = \sum_0^{h_1} n + T(1) * 2 ^ {h_1} = n * h_1 +2 ^ {h_1} = n*\log_9n + 2^{\log_9n} \in \Theta(n\log n) $
$ S_2 = \sum_0^{h_2} n + T(1) * 1 = n * h_1 + 1 = n*\log_{\frac 9 8} n + 1 \in \Theta(n\log n) $

⇒ $ T(n) \in \Theta(n \log n)$

  • $ T_e(n) = T_e(2n/3) + 1$

Cazul 2 al Teoremei Master cu $ c = \log_{frac 3 2}1 = 0, k = 0 $ deci $ T_e(n) = \Theta(n^0 * \log^{0+1}n) \Theta(\log n) $

  • $ T_{Strassen}(n) = 7T_{Strassen}(n/2) + n^2 $

$ c = \log_27 \approx 2.81 $ ⇒ cazul 1 al teoremei master, deci $ T_{Strassen}(n) = \Theta(n ^ {\log_27}) \approx \Theta(n ^ {2.81}) $

  • $ T_{Karatsuba}(n) = 3T_{Karatsuba}(n/2) + 1 $

$ c = \log_23 \approx 1.58 $ ⇒ cazul 1 al teoremei master, deci $ T_{Karatsuba}(n) = \Theta(n ^ {\log_23}) \approx \Theta(n ^ {1.58}) $

  • $ T_{Quicksort}(n) = T_{Quicksort}(n-1) + O(n) $

nu se poate aplica master
Folosind metoda arborelui, fiecare nivel $ h $ va contine nodul $ T(n-h) $ si costul $ n-h $. Obtinem formula $ T_{Quicksort}(n) = \sum_{i=1}^n{n-h} + 1 * T(1) = \frac {n(n-1)} 2 + \Theta(1) \in \Theta(n^2) $