Recurențe

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 \geq 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. Folosiți Teorema Master pentru a rezolva următoarele recurențe:

Exemplu de cod cu aceasta recurenta

Exemplu de cod cu aceasta recurenta

// O metoda destul de ineficienta de calcul al sumei elementelor unui vector
int sum(int arr[], int lo, int hi) {
    if(lo == hi)
        return arr[lo];
    int x = (hi - lo) / 4;
    return  sum(arr, lo, lo + x) +  
            sum(arr, lo + x + 1, lo + 2 * x) + 
            sum(arr, lo + 2 * x + 1, lo + 3 * x) +  
            sum(arr, lo + 3 * x + 1, hi);
}

2. Fie următorul algoritm de căutare a unei valori v într-un array sortat arr:

int search(int arr[], int lo, int hi, int v)
{
    int mid = (lo + hi) / 2;  
    if (arr[mid] == v)
        return mid;
    if (lo == hi)
        return -1;
    if (arr[mid] > v)
        return search(arr, lo, mid, v);
    else
        return search(arr, mid, hi, v);
}

3. Folosiți cele 3 metode (metoda arborilor, metoda substituției, teorema master) pentru a rezolva recurențele:

Aceasta recurenta descrie Algoritmul Strassen

Aceasta recurenta descrie Algoritmul Karatsuba

Aceasta recurenta descrie Algoritmul Quicksort

4. Rezolvați următoarea recurență folosind metoda substituției: $ T(n) = 2 T(\frac{n}{2}) + 1$ .

5. Rezolvați următoarea recurență folosind metoda arborilor: $ T(n) = T($ $ n \over 4$ $ ) + T($ $ 3n \over 4$ $ ) + n$ .

Soluțiile acestui laborator se găsesc aici