Salta al contenuto
Note per Studenti Master Theorem - enunciato, casi e applicazioni

Master Theorem - enunciato, casi e applicazioni

In questa pagina 8

Il Master Theorem (MT) dà l'ordine di grandezza delle soluzioni di una classe importante di ricorrenze, senza risolverle esplicitamente. Ha una struttura più ristretta della formula generaleL'albero della ricorrenza ha la forma dell'albero delle chiamate dell'istanza peggiore e T(n) è la somma dei lavori dei nodi. Per la famiglia T(n) = s(n)T(f(n)) + w(n) con base T0 per n <= n0, contando i nodi per livello con le iterate di f e il livello f*(n,n0) si ottiene la formula chiusa T(n) = somma_l [prodotto_j s(f^(j)(n))] w(f^(l)(n)) + [prodotto s] T0, verificata per induzione e applicata a esempi (merge sort, Hanoi, ricorrenze con radice).Albero della ricorrenza e formula generale per le ricorrenze →: si ottiene da essa. Prima la versione semplificata (con prova), poi la generalizzazione.

Enunciato

Siano a,T0>0a, T_0 > 0, un intero b>1b > 1 e w(n):Z+→Z+w(n) : \mathbb{Z}^+ \to \mathbb{Z}^+ non decrescente. Si consideri, per n=bkn = b^k, T(n)={T0n=1a T(n/b)+w(n)n>1.(∗)T(n) = \begin{cases} T_0 & n = 1 \\ a\,T(n/b) + w(n) & n > 1. \end{cases} \tag{$\ast$} È la formula generale con s(n)=as(n) = a, f(n)=n/bf(n) = n/b, n0=1n_0 = 1. La funzione di soglia (threshold) è nlog⁡ban^{\log_b a}.

Teorema (Master Theorem). La soluzione di (∗)(\ast) soddisfa T(n)={>Θ(nlog⁡ba)se ∃ ε>0:w(n)=O(nlog⁡ba−ε)(Caso 1)>Θ(nlog⁡balog⁡n)se w(n)=Θ(nlog⁡ba)(Caso 2)>Θ(w(n))se {∃ ε>0:w(n)=Ω(nlog⁡ba+ε)∃ c∈R, 0<c<1:∀na w(n/b)≤c w(n)(Caso 3)>T(n) = \begin{cases} > \Theta\bigl(n^{\log_b a}\bigr) & \text{se } \exists\,\varepsilon > 0 : w(n) = O\bigl(n^{\log_b a - \varepsilon}\bigr) \quad \text{(Caso 1)} \\[4pt] > \Theta\bigl(n^{\log_b a}\log n\bigr) & \text{se } w(n) = \Theta\bigl(n^{\log_b a}\bigr) \quad \text{(Caso 2)} \\[4pt] > \Theta\bigl(w(n)\bigr) & \text{se } \begin{cases} \exists\,\varepsilon > 0 : w(n) = \Omega\bigl(n^{\log_b a + \varepsilon}\bigr) \\ \exists\,c \in \mathbb{R},\ 0 < c < 1 : \forall n \quad a\,w(n/b) \le c\,w(n) \end{cases} \quad \text{(Caso 3)} > \end{cases}

La condizione del Caso 3 con cc è la condizione di regolarità: ww cresce "senza sbalzi". Per le funzioni naturali del corso (i polinomi) vale sempre (vedi sotto). Come sempre, i logaritmi di base costante dentro l'ordine di grandezza si scrivono senza base (differiscono per una costante moltiplicativa; Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →).

Il MT non è esaustivo. Esistono parametri che non rientrano in nessun caso. Esempio: a=1a = 1, b=2b = 2, w(n)=log⁡2nw(n) = \log_2 n: la soglia è nlog⁡21=n0=1n^{\log_2 1} = n^0 = 1 e ww è asintoticamente maggiore, quindi potrebbe applicarsi solo il Caso 3; ma ∀ε>0\forall \varepsilon > 0 si ha lim⁡n→∞log⁡2nnε=0\lim_{n\to\infty}\frac{\log_2 n}{n^\varepsilon} = 0 (vedi Notazione asintoticaDefinizioni di O, Omega, Theta e o piccolo con le costanti c ed n0; esempi con costanti esplicite; proprietà (polinomi, esponenziali, logaritmi, somme, implicazioni tra notazioni); sommatorie notevoli; terminologia (logaritmica, lineare, polinomiale, esponenziale).Notazione asintotica →), quindi log⁡2n\log_2 n non è mai Ω(nε)\Omega(n^{\varepsilon}) e il Caso 3 non vale. Sul confronto con la soglia: la differenza deve essere una potenza polinomiale nεn^\varepsilon, non un fattore logaritmico.

Grafico interattivo: Soglie a confronto (b = 2): n^(log2 a) per a = 2 (n), a = 3 (n^1,58), a = 4 (n^2); e n log2 n

Prova

Passo preliminare. Per funzioni positive a dominio intero, OO e Ω\Omega si possono dichiarare valide per tutti gli n>0n > 0 (non solo da un nˉ\bar n in poi). Se w(n)≤c g(n)w(n) \le c\,g(n) per n>nˉn > \bar n, si pone cˉ=max⁡{c, w(1)/g(1), …, w(nˉ)/g(nˉ)}\bar c = \max\{c,\ w(1)/g(1),\ \dots,\ w(\bar n)/g(\bar n)\}: per 1≤n≤nˉ1 \le n \le \bar n, w(n)=w(n)g(n)g(n)≤cˉ g(n)w(n) = \frac{w(n)}{g(n)}g(n) \le \bar c\,g(n), e per n>nˉn > \bar n, w(n)≤c g(n)≤cˉ g(n)w(n) \le c\,g(n) \le \bar c\,g(n). Analogamente, per Ω\Omega si usa c^=min⁡{c, w(1)/g(1), …, w(n^)/g(n^)}\hat c = \min\{c,\ w(1)/g(1),\ \dots,\ w(\hat n)/g(\hat n)\}.

Il punto di partenza. Con la formula generale (s=as = a, f=n/bf = n/b, n0=1n_0 = 1, f∗(n,1)=log⁡bn−1f^\ast(n,1) = \log_b n - 1, aℓa^\ell nodi al livello ℓ\ell di taglia n/bℓn/b^\ell) e l'identità alog⁡bn=nlog⁡baa^{\log_b n} = n^{\log_b a}: T(n)=∑ℓ=0log⁡bn−1aℓ w ⁣(nbℓ)+nlog⁡ba T0.(∗∗)T(n) = \sum_{\ell=0}^{\log_b n - 1} a^\ell\, w\!\left(\frac{n}{b^\ell}\right) + n^{\log_b a}\,T_0. \tag{$\ast\ast$} Il secondo termine è Θ(nlog⁡ba)\Theta(n^{\log_b a}) perché T0>0T_0 > 0: stesso ordine della soglia. Resta da studiare la somma nei tre casi.

Caso 1. Da w(n)=O(nlog⁡ba−ε)w(n) = O(n^{\log_b a - \varepsilon}) segue ∃ cˉ>0\exists\,\bar c > 0 con w(n)≤cˉ nlog⁡ba−εw(n) \le \bar c\,n^{\log_b a - \varepsilon} per ogni n>0n > 0. Usando (bℓ)log⁡ba=aℓ(b^\ell)^{\log_b a} = a^\ell: ∑ℓ=0log⁡bn−1aℓ w ⁣(nbℓ)≤cˉ∑ℓ=0log⁡bn−1aℓ(nbℓ)log⁡ba−ε=cˉ∑ℓ=0log⁡bn−1aℓ nlog⁡ba−εaℓ b−ℓε=cˉ nlog⁡ba−ε∑ℓ=0log⁡bn−1(bε)ℓ=cˉ nlog⁡ba−ε bεlog⁡bn−1bε−1=cˉ nlog⁡ba−ε nε−1bε−1≤cˉbε−1 nlog⁡ba.\begin{aligned} \sum_{\ell=0}^{\log_b n - 1} a^\ell\, w\!\left(\tfrac{n}{b^\ell}\right) &\le \bar c \sum_{\ell=0}^{\log_b n - 1} a^\ell \left(\frac{n}{b^\ell}\right)^{\log_b a - \varepsilon} = \bar c \sum_{\ell=0}^{\log_b n - 1} \frac{a^\ell\, n^{\log_b a - \varepsilon}}{a^\ell\, b^{-\ell\varepsilon}} \\ &= \bar c\, n^{\log_b a - \varepsilon}\sum_{\ell=0}^{\log_b n - 1} (b^\varepsilon)^\ell = \bar c\, n^{\log_b a - \varepsilon}\,\frac{b^{\varepsilon\log_b n} - 1}{b^\varepsilon - 1} = \bar c\, n^{\log_b a - \varepsilon}\,\frac{n^\varepsilon - 1}{b^\varepsilon - 1} \\ &\le \frac{\bar c}{b^\varepsilon - 1}\, n^{\log_b a}. \end{aligned} La somma è dunque O(nlog⁡ba)O(n^{\log_b a}) e T(n)=O(nlog⁡ba)+Θ(nlog⁡ba)=Θ(nlog⁡ba)T(n) = O(n^{\log_b a}) + \Theta(n^{\log_b a}) = \Theta(n^{\log_b a}). Se T0=0T_0 = 0 si ha solo T(n)=O(nlog⁡ba)T(n) = O(n^{\log_b a}). Per T0>0T_0 > 0 la soluzione vale anche con lavoro nullo w=0w = 0: allora l'unico lavoro è sulle foglie.

Caso 2. Da w(n)=Θ(nlog⁡ba)w(n) = \Theta(n^{\log_b a}) si ha c^ nlog⁡ba≤w(n)≤cˉ nlog⁡ba\hat c\,n^{\log_b a} \le w(n) \le \bar c\,n^{\log_b a} per ogni n>0n > 0. Il termine aℓ (n/bℓ)log⁡ba=aℓnlog⁡ba/aℓ=nlog⁡baa^\ell\, (n/b^\ell)^{\log_b a} = a^\ell n^{\log_b a}/a^\ell = n^{\log_b a} non dipende da ℓ\ell: ogni livello costa lo stesso. Quindi ∑ℓ=0log⁡bn−1aℓ w ⁣(nbℓ)≤cˉ nlog⁡ba∑ℓ=0log⁡bn−11=cˉ nlog⁡balog⁡bn,\sum_{\ell=0}^{\log_b n - 1} a^\ell\, w\!\left(\tfrac{n}{b^\ell}\right) \le \bar c\,n^{\log_b a}\sum_{\ell=0}^{\log_b n - 1}1 = \bar c\,n^{\log_b a}\log_b n, e allo stesso modo ≥c^ nlog⁡balog⁡bn\ge \hat c\,n^{\log_b a}\log_b n. Quindi la somma è Θ(nlog⁡balog⁡n)\Theta(n^{\log_b a}\log n) e, aggiungendo Θ(nlog⁡ba)\Theta(n^{\log_b a}), T(n)=Θ(nlog⁡balog⁡n)T(n) = \Theta(n^{\log_b a}\log n).

Caso 3. Si dimostra prima che la regolarità implica aℓw(n/bℓ)≤cℓ w(n)a^\ell w(n/b^\ell) \le c^\ell\, w(n) per ogni ℓ≥0\ell \ge 0, per induzione su ℓ\ell:

  • [B] ℓ=0\ell = 0: banale.
  • [HP] vera per i valori minori di ℓ>0\ell > 0.
  • [TH] aℓw(n/bℓ)=aℓ−1⋅a⋅w ⁣(n/bℓ−1b)≤aℓ−1 c w(n/bℓ−1)a^\ell w(n/b^\ell) = a^{\ell-1}\cdot a\cdot w\!\left(\frac{n/b^{\ell-1}}{b}\right) \le a^{\ell-1}\,c\,w(n/b^{\ell-1}) (regolarità con n′=n/bℓ−1n' = n/b^{\ell-1}), =c⋅aℓ−1w(n/bℓ−1)≤c⋅cℓ−1w(n)=cℓw(n)= c\cdot a^{\ell-1}w(n/b^{\ell-1}) \le c\cdot c^{\ell-1}w(n) = c^\ell w(n) (per [HP]).

Allora, con la serie geometrica di ragione c<1c < 1, ∑ℓ=0log⁡bn−1aℓ w ⁣(nbℓ)≤w(n)∑ℓ=0log⁡bn−1cℓ<w(n)∑ℓ=0∞cℓ=w(n)1−c,\sum_{\ell=0}^{\log_b n - 1} a^\ell\, w\!\left(\tfrac{n}{b^\ell}\right) \le w(n)\sum_{\ell=0}^{\log_b n - 1}c^\ell < w(n)\sum_{\ell=0}^{\infty}c^\ell = \frac{w(n)}{1 - c}, quindi la somma è O(w(n))O(w(n)) e T(n)=O(w(n))+Θ(nlog⁡ba)=O(w(n))T(n) = O(w(n)) + \Theta(n^{\log_b a}) = O(w(n)), perché la soglia è dominata da w(n)=Ω(nlog⁡ba+ε)w(n) = \Omega(n^{\log_b a + \varepsilon}). Per il limite inferiore, per n>1n > 1, T(n)=a T(n/b)+w(n)≥w(n)T(n) = a\,T(n/b) + w(n) \ge w(n) (somma di contributi non negativi): T(n)=Ω(w(n))T(n) = \Omega(w(n)). I due limiti danno T(n)=Θ(w(n))T(n) = \Theta(w(n)). □\square

Che cosa dice il MT sul progetto. Nel Caso 1 domina il lavoro alle foglie: per migliorare occorre ridurre il numero di foglie, per esempio le sottoistanze generate dal Divide (è ciò che fa l'algoritmo di StrassenStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione →). Nel Caso 3 domina il lavoro dell'istanza principale: occorre ridurre quel lavoro. Il Caso 2 corrisponde a una strategia bilanciata, con lo stesso contributo da ogni livello: per migliorare serve spesso una diversa e più efficiente proprietà di sottostruttura.

La versione estesa

Una prova più complessa (si rimanda al libro di testo) mostra che i tre casi valgono identici anche per T(n)={a T(⌊n/b⌋)+w(n)n>n0T0n≤n0eT(n)={a T(⌈n/b⌉)+w(n)n>n0T0n≤n0T(n) = \begin{cases} a\,T(\lfloor n/b\rfloor) + w(n) & n > n_0 \\ T_0 & n \le n_0 \end{cases} \qquad\text{e}\qquad T(n) = \begin{cases} a\,T(\lceil n/b\rceil) + w(n) & n > n_0 \\ T_0 & n \le n_0 \end{cases} per valori arbitrari di nn e di n0n_0. Arrestare la ricorrenza a n0>1n_0 > 1 sostituisce ogni sottoalbero di profondità e costo costanti con la costante T0T_0, e questo può cambiare solo le costanti moltiplicative, non l'ordine di grandezza. Per questo, quando si usa il MT si adotta la convenzione di scrivere solo la relazione implicita, T(n)=a T(n/b)+w(n),T(n) = a\,T(n/b) + w(n), senza arrotondamenti. È una convenzione da usare solo per applicare il MT: altrove quella scrittura non ha senso (Divide and conquer - proprietà di sottostruttura e albero delle chiamateUn algoritmo divide and conquer nasce da una proprietà di sottostruttura (funzioni Divide e Conquer, base n0) con sottoistanze di taglia strettamente minore; l'albero delle chiamate ne descrive l'esecuzione, e il D&C non ha memoria (ripete le sottoistanze uguali). Esempio completo: MAX di un array, con correttezza per induzione, ricorrenza e conteggio esatto n-1 tramite il teorema sugli alberi binari pieni.Divide and conquer - proprietà di sottostruttura e albero delle chiamate →).

Come si applica

  1. Si leggono aa (numero di sottoistanze), bb (fattore di riduzione) e w(n)w(n).
  2. Si calcola la soglia nlog⁡ban^{\log_b a}.
  3. Si confronta w(n)w(n) con la soglia per esponente: se ww è polinomiale Θ(nk)\Theta(n^k), i casi sono k<log⁡bak < \log_b a (Caso 1), k=log⁡bak = \log_b a (Caso 2), k>log⁡bak > \log_b a (Caso 3).
  4. Nel Caso 3 si verifica la regolarità, cioè si trova c<1c < 1 con a w(n/b)≤c w(n)a\,w(n/b) \le c\,w(n).

Regolarità per i polinomi. Se w(n)=nkw(n) = n^k e siamo nel Caso 3, per un ε>0\varepsilon > 0 è k≥log⁡ba+εk \ge \log_b a + \varepsilon. Allora a w(n/b)=a(nb)k=abk nk=abk w(n)≤ablog⁡ba+ε w(n)=aa bε w(n)=1bε w(n),a\,w(n/b) = a\left(\frac nb\right)^k = \frac{a}{b^k}\,n^k = \frac{a}{b^k}\,w(n) \le \frac{a}{b^{\log_b a + \varepsilon}}\,w(n) = \frac{a}{a\,b^\varepsilon}\,w(n) = \frac{1}{b^\varepsilon}\,w(n), perché blog⁡ba=ab^{\log_b a} = a: basta c=b−ε<1c = b^{-\varepsilon} < 1. Per un lavoro polinomiale la regolarità vale sempre.

Esempi di applicazione

Ricorrenza aa, bb soglia confronto caso risultato
2T(n/2)+12T(n/2) + 1 (MAX) 22, 22 nn 1=O(n1−ε)1 = O(n^{1-\varepsilon}), ε=1\varepsilon = 1 1 Θ(n)\Theta(n)
2T(n/2)+n−12T(n/2) + n - 1 (merge sort) 22, 22 nn n−1=Θ(n)n - 1 = \Theta(n) 2 Θ(nlog⁡n)\Theta(n\log n)
T(n/2)+1T(n/2) + 1 (ricerca binaria) 11, 22 11 1=Θ(1)1 = \Theta(1) 2 Θ(log⁡n)\Theta(\log n)
3T(n/2)+3n3T(n/2) + 3n (ARB) 33, 22 nlog⁡23n^{\log_2 3} n=O(nlog⁡23−ε)n = O(n^{\log_2 3 - \varepsilon}) 1 Θ(nlog⁡23)\Theta(n^{\log_2 3})
7T(n/2)+n27T(n/2) + n^2 (tipo Strassen) 77, 22 nlog⁡27n^{\log_2 7} n2=O(nlog⁡27−ε)n^2 = O(n^{\log_2 7-\varepsilon}) 1 Θ(nlog⁡27)\Theta(n^{\log_2 7})
4T(n/2)+n24T(n/2) + n^2 44, 22 n2n^2 n2=Θ(n2)n^2 = \Theta(n^2) 2 Θ(n2log⁡n)\Theta(n^2\log n)
T(n/2)+nT(n/2) + n 11, 22 11 n=Ω(n0+ε)n = \Omega(n^{0+\varepsilon}), reg. c=1/2c = 1/2 3 Θ(n)\Theta(n)
3T(n/4)+n23T(n/4) + n^2 33, 44 nlog⁡43≈n0,79n^{\log_4 3}\approx n^{0,79} n2=Ω(nlog⁡43+ε)n^2 = \Omega(n^{\log_4 3 + \varepsilon}), reg. c=3/16c = 3/16 3 Θ(n2)\Theta(n^2)

I casi MAX e merge sort, in dettaglio: per MAX a=2a = 2, b=2b = 2, w=1w = 1; la soglia è nlog⁡22=nn^{\log_2 2} = n e con ε=1\varepsilon = 1 si ha w=1=O(n1−ε)=O(1)w = 1 = O(n^{1-\varepsilon}) = O(1): Caso 1, T=Θ(n)T = \Theta(n). Per merge sort w(n)=n−1=Θ(n)w(n) = n - 1 = \Theta(n): Caso 2, T=Θ(nlog⁡n)T = \Theta(n\log n). L'algoritmo per le matrici ARB del compito del 19 giugno 2024 (prodotto con tre moltiplicazioni ricorsive) ha T(n)=3T(n/2)+3nT(n) = 3T(n/2) + 3n: Caso 1.

Regolarità nei due Casi 3 della tabella: per T(n/2)+nT(n/2) + n si ha 1⋅n2=12 n1\cdot\frac n2 = \frac12\,n, quindi c=12c = \frac12; per 3T(n/4)+n23T(n/4) + n^2 si ha 3(n4)2=316 n23\left(\frac n4\right)^2 = \frac{3}{16}\,n^2, quindi c=316c = \frac3{16}.

Un controllo numerico (rapporto tra T(n)T(n) esatto per n=2kn = 2^k e la soglia, che tende a una costante):

python
from functools import lru_cache

def rapporto(a, b, w, T0, k, scala):
    @lru_cache(None)
    def T(n): return T0 if n == 1 else a * T(n // b) + w(n)
    n = b**k
    return T(n) / scala(n)

# 3T(n/4) + n^2, T(1) = 1:  T(n) / n^2  ->  16/13 = 1.2307...
print(rapporto(3, 4, lambda n: n*n, 1, 10, lambda n: n*n))
# 7T(n/2) + n^2:  T(n) / n^(log2 7)  ->  7/3 = 2.333...
import math
print(rapporto(7, 2, lambda n: n*n, 1, 20, lambda n: n**math.log2(7)))

Uso non corretto del MT

Va usato verificando sempre le condizioni dei tre casi. Per T(n)=2T(n/2)+nlog⁡2nT(n) = 2T(n/2) + n\log_2 n: soglia nlog⁡22=nn^{\log_2 2} = n; poiché w(n)=nlog⁡n=ω(n)w(n) = n\log n = \omega(n) i primi due casi non si applicano. Per il Caso 3 servirebbe nlog⁡n=Ω(n1+ε)n\log n = \Omega(n^{1+\varepsilon}) per un ε>0\varepsilon > 0, ma log⁡n/nε→0\log n / n^\varepsilon \to 0: la condizione non è soddisfatta e il MT non si può applicare. Applicarlo comunque (Caso 3) darebbe Θ(nlog⁡n)\Theta(n\log n), che è errato. Lo si vede srotolando con n=2kn = 2^k (formula generale, T0=1T_0 = 1, w(n)=nlog⁡2nw(n) = n\log_2 n): T(n)=∑ℓ=0log⁡2n−12ℓ⋅n2ℓlog⁡2n2ℓ+n=∑ℓ=0log⁡2n−1n (log⁡2n−ℓ)+n=n∑ℓ′=1log⁡2nℓ′+n,T(n) = \sum_{\ell=0}^{\log_2 n-1}2^\ell\cdot\frac{n}{2^\ell}\log_2\frac{n}{2^\ell} + n = \sum_{\ell=0}^{\log_2 n - 1}n\,(\log_2 n - \ell) + n = n\sum_{\ell'=1}^{\log_2 n}\ell' + n, con il cambio di indice ℓ′=log⁡2n−ℓ\ell' = \log_2 n - \ell (per ℓ=0..log⁡2n−1\ell = 0..\log_2 n - 1, ℓ′\ell' va da log⁡2n\log_2 n a 11) e la somma di Gauss ∑ℓ′=1mℓ′=m(m+1)2\sum_{\ell'=1}^{m}\ell' = \frac{m(m+1)}{2} (SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →): T(n)=n log⁡2n (log⁡2n+1)2+n=Θ(nlog⁡2n),T(n) = n\,\frac{\log_2 n\,(\log_2 n + 1)}{2} + n = \Theta\bigl(n\log^2 n\bigr), un ordine di grandezza più grande (di un fattore log⁡n\log n) di quello ottenuto con il MT usato male. Verifica: per T(1)=1T(1) = 1 si ha T(2)=2T(1)+2=4=2⋅1⋅22+2T(2) = 2T(1) + 2 = 4 = 2\cdot\frac{1\cdot2}{2} + 2, T(4)=2⋅4+8=16=4⋅2⋅32+4T(4) = 2\cdot4 + 8 = 16 = 4\cdot\frac{2\cdot3}{2} + 4.

Errori comuni

  • Applicare il Caso 3 con ww maggiore della soglia di un fattore solo logaritmico (come nlog⁡nn\log n contro nn): serve nεn^\varepsilon.
  • Dimenticare di verificare la regolarità nel Caso 3, oppure verificarla con un c≥1c \ge 1.
  • Confondere aa e bb (la soglia è nlog⁡ban^{\log_b a}, non nlog⁡abn^{\log_a b}).
  • Applicare il MT a ricorrenze con sottoistanze di taglie diverse, come T(n/2)+T(n/3)+nT(n/2) + T(n/3) + n: servono un limite superiore T′T' con taglie uguali (Esercizio - ricorrenza con parti intere, Master Theorem e induzione parametrica (simulazione d'esame 2025-26, es. 1)) o la formula generale.
  • Usare la scrittura T(n)=aT(n/b)+w(n)T(n) = aT(n/b) + w(n), senza arrotondamenti, al di fuori del MT.

Domande d'esame

  1. Enunciare il Master Theorem e dire che cosa domina il costo nei tre casi. Risposta: confronto tra w(n)w(n) e nlog⁡ban^{\log_b a}; Caso 1 foglie, Caso 2 tutti i livelli ugualmente (e un fattore log⁡n\log n), Caso 3 radice (istanza principale).
  2. Dare l'ordine di grandezza di T(n)=3T(n/4)+n2T(n) = 3T(n/4) + n^2. Soglia nlog⁡43n^{\log_4 3}; n2=Ω(nlog⁡43+1)n^2 = \Omega(n^{\log_4 3+1}) e regolarità con c=3/16c = 3/16: Caso 3, Θ(n2)\Theta(n^2).
  3. Si può applicare il MT a T(n)=2T(n/2)+nlog⁡nT(n) = 2T(n/2) + n\log n? Qual è la soluzione? No (né Caso 2 né 3: nlog⁡nn\log n non è Θ(n)\Theta(n) né Ω(n1+ε)\Omega(n^{1+\varepsilon})); srotolando T(n)=Θ(nlog⁡2n)T(n) = \Theta(n\log^2 n).

Versione ripasso

  • Ricorrenza: T(1)=T0>0T(1)=T_0>0, T(n)=a T(n/b)+w(n)T(n)=a\,T(n/b)+w(n), b>1b>1 intero, ww non decrescente, n=bkn=b^k; soglia nlog⁡ban^{\log_b a} (da Albero della ricorrenza e formula generale per le ricorrenzeL'albero della ricorrenza ha la forma dell'albero delle chiamate dell'istanza peggiore e T(n) è la somma dei lavori dei nodi. Per la famiglia T(n) = s(n)T(f(n)) + w(n) con base T0 per n <= n0, contando i nodi per livello con le iterate di f e il livello f*(n,n0) si ottiene la formula chiusa T(n) = somma_l [prodotto_j s(f^(j)(n))] w(f^(l)(n)) + [prodotto s] T0, verificata per induzione e applicata a esempi (merge sort, Hanoi, ricorrenze con radice).Albero della ricorrenza e formula generale per le ricorrenze →: T(n)=∑ℓ<log⁡bnaℓw(n/bℓ)+nlog⁡baT0T(n)=\sum_{\ell<\log_b n}a^\ell w(n/b^\ell)+n^{\log_b a}T_0).
  • Caso 1: w=O(nlog⁡ba−ε)⇒T=Θ(nlog⁡ba)w=O(n^{\log_b a-\varepsilon})\Rightarrow T=\Theta(n^{\log_b a}) (foglie dominano; somma ≤cˉbε−1nlog⁡ba\le\frac{\bar c}{b^\varepsilon-1}n^{\log_b a}). Caso 2: w=Θ(nlog⁡ba)⇒T=Θ(nlog⁡balog⁡n)w=\Theta(n^{\log_b a})\Rightarrow T=\Theta(n^{\log_b a}\log n) (ogni livello costa nlog⁡ban^{\log_b a}). Caso 3: w=Ω(nlog⁡ba+ε)w=\Omega(n^{\log_b a+\varepsilon}) e regolarità a w(n/b)≤c w(n)a\,w(n/b)\le c\,w(n), c<1c<1 ⇒T=Θ(w(n))\Rightarrow T=\Theta(w(n)) (dalla regolarità aℓw(n/bℓ)≤cℓw(n)a^\ell w(n/b^\ell)\le c^\ell w(n), somma <w(n)1−c<\frac{w(n)}{1-c}; T≥wT\ge w).
  • Prova: OO/Ω\Omega estesi a tutti gli n>0n>0 prendendo cˉ=max⁡\bar c=\max, c^=min⁡\hat c=\min dei rapporti iniziali. Se T0=0T_0=0, caso 1 dà solo OO.
  • Estensione: valido con ⌊n/b⌋\lfloor n/b\rfloor, ⌈n/b⌉\lceil n/b\rceil, nn e n0n_0 arbitrari; per applicarlo si scrive T(n)=aT(n/b)+w(n)T(n)=aT(n/b)+w(n) (solo per il MT).
  • Non esaustivo: a=1,b=2,w=log⁡na=1,b=2,w=\log n non rientra (il confronto deve essere per potenza nεn^\varepsilon). Per polinomi w=nkw=n^k la regolarità vale con c=b−εc=b^{-\varepsilon}.
  • Esempi: 2T(n/2)+1→Θ(n)2T(n/2)+1\to\Theta(n); 2T(n/2)+n−1→Θ(nlog⁡n)2T(n/2)+n-1\to\Theta(n\log n); T(n/2)+1→Θ(log⁡n)T(n/2)+1\to\Theta(\log n); 3T(n/2)+3n→Θ(nlog⁡23)3T(n/2)+3n\to\Theta(n^{\log_2 3}); 7T(n/2)+n2→Θ(nlog⁡27)7T(n/2)+n^2\to\Theta(n^{\log_2 7}); 4T(n/2)+n2→Θ(n2log⁡n)4T(n/2)+n^2\to\Theta(n^2\log n); T(n/2)+n→Θ(n)T(n/2)+n\to\Theta(n) (c=12c=\frac12); 3T(n/4)+n2→Θ(n2)3T(n/4)+n^2\to\Theta(n^2) (c=316c=\frac3{16}).
  • Uso scorretto: 2T(n/2)+nlog⁡n2T(n/2)+n\log n: nessun caso; srotolando T=nlog⁡2n(log⁡2n+1)2+n=Θ(nlog⁡2n)T=n\frac{\log_2 n(\log_2 n+1)}2+n=\Theta(n\log^2 n) (il caso 3 darebbe, erroneamente, Θ(nlog⁡n)\Theta(n\log n)).
  • Errori tipici: caso 3 con differenza solo logaritmica; regolarità non verificata; log⁡ba\log_b a scambiato con log⁡ab\log_a b; MT con sottoistanze di taglia diversa; scrittura senza arrotondamenti fuori dal MT.
  • Passi della prova, caso 1: ∑ℓ<log⁡bnaℓcˉ (n/bℓ)log⁡ba−ε=cˉ nlog⁡ba−ε∑(bε)ℓ=cˉ nlog⁡ba−εnε−1bε−1≤cˉbε−1nlog⁡ba\sum_{\ell<\log_bn}a^\ell\bar c\,(n/b^\ell)^{\log_ba-\varepsilon}=\bar c\,n^{\log_ba-\varepsilon}\sum(b^\varepsilon)^\ell=\bar c\,n^{\log_ba-\varepsilon}\frac{n^\varepsilon-1}{b^\varepsilon-1}\le\frac{\bar c}{b^\varepsilon-1}n^{\log_ba}, usando (bℓ)log⁡ba=aℓ(b^\ell)^{\log_ba}=a^\ell. Caso 3: induzione su ℓ\ell per aℓw(n/bℓ)≤cℓw(n)a^\ell w(n/b^\ell)\le c^\ell w(n) (regolarità con n′=n/bℓ−1n'=n/b^{\ell-1}).
  • Come si applica: (1) leggere aa, bb, ww; (2) soglia nlog⁡ban^{\log_ba}; (3) confrontare gli esponenti se w=Θ(nk)w=\Theta(n^k): k<log⁡bak<\log_ba caso 1, == caso 2, >> caso 3; (4) nel caso 3 trovare c<1c<1 con a w(n/b)≤c w(n)a\,w(n/b)\le c\,w(n). Regolarità polinomiale: a(n/b)k=abknk≤b−εnka(n/b)^k=\frac a{b^k}n^k\le b^{-\varepsilon}n^k.
  • Significato per il progetto: caso 1 domina il lavoro alle foglie (ridurre le sottoistanze, come Strassen: Algoritmo di Strassen e ibridazioneStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione →); caso 3 domina la radice; caso 2 tutti i livelli ugualmente (cercare un'altra sottostruttura).
  • Controesempio (nessun caso si applica): 2T(n/2)+nlog⁡n2T(n/2)+n\log n, T(1)=1T(1)=1, n=2kn=2^k: ∑ℓ<k2ℓn2ℓ(k−ℓ)+n=n∑ℓ′=1kℓ′+n=nk(k+1)2+n\sum_{\ell<k}2^\ell\frac n{2^\ell}(k-\ell)+n=n\sum_{\ell'=1}^{k}\ell'+n=n\frac{k(k+1)}2+n (cambio ℓ′=k−ℓ\ell'=k-\ell, SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →); T(2)=4T(2)=4, T(4)=16T(4)=16.
  • Caso 2, passo chiave: aℓ(n/bℓ)log⁡ba=nlog⁡baa^\ell(n/b^\ell)^{\log_ba}=n^{\log_ba} non dipende da ℓ\ell: ogni livello costa lo stesso e i livelli sono log⁡bn\log_bn. Caso 3: T≥wT\ge w dà Ω(w)\Omega(w), la soglia è dominata da ww.
  • Tabella: T(n/2)+1→Θ(log⁡n)T(n/2)+1\to\Theta(\log n) (caso 2, soglia 11); T(n/2)+n→Θ(n)T(n/2)+n\to\Theta(n) (c=12c=\frac12); 8T(n/2)+n2→Θ(n3)8T(n/2)+n^2\to\Theta(n^3) (caso 1).
  • Domande tipiche: enunciato e significato dei tre casi; 3T(n/4)+n23T(n/4)+n^2 (c=316c=\frac3{16}, caso 3); applicabilità a 2T(n/2)+nlog⁡n2T(n/2)+n\log n (no, Θ(nlog⁡2n)\Theta(n\log^2n)).

Esercizi su questo argomento

Teoria collegata