Algoritmi · Analisi della complessità

Equazioni di ricorrenza e Master Theorem

Le ricorrenze traducono la struttura di un algoritmo ricorsivo in un’equazione. Il Master Theorem permette di risolvere rapidamente molti algoritmi divide et impera, purché se ne verifichino davvero le ipotesi.

Perché compaiono le ricorrenze

Un algoritmo ricorsivo risolve un’istanza usando una o più istanze più piccole. Il suo tempo di esecuzione dipende quindi dal costo delle chiamate ricorsive e dal lavoro svolto fuori da esse.

T(n)= costo delle chiamate ricorsive + lavoro locale

Ricerca binaria

T(n)=T(n/2)+Θ(1): una sola metà e lavoro costante.

Merge sort

T(n)=2T(n/2)+Θ(n): due metà e fusione lineare.

Ricorsione lineare

T(n)=T(n1)+Θ(n): il problema diminuisce di una unità.

Serve sempre un caso base. Per esempio T(1)=Θ(1). Senza una condizione di arresto, la ricorrenza non descrive un algoritmo terminante.

Come leggere una ricorrenza divide et impera

T(n)= aT(n/b)+f(n)

a — sottoproblemi

Numero di chiamate ricorsive generate da ogni istanza. Deve essere almeno 1.

b — riduzione

Ogni sottoproblema ha dimensione n/b. Nel teorema si richiede b>1.

f(n) — lavoro locale

Divisione del problema, combinazione dei risultati e ogni operazione non ricorsiva.

Il costo delle sole foglie dell’albero di ricorsione è determinato da

alogbn = nlogba

Per questo il termine critico del Master Theorem è nlogba: confronta la crescita delle foglie con quella del lavoro f(n).

Metodi di risoluzione

Espansione iterativa

Sostituisci ripetutamente la ricorrenza finché raggiungi il caso base, poi riconosci e sommi la serie ottenuta.

Albero di ricorsione

Calcola il costo di ogni livello, il numero di livelli e il costo delle foglie. È intuitivo e aiuta a formulare un’ipotesi.

Sostituzione

Ipotizza un limite asintotico e dimostralo per induzione, scegliendo con attenzione costanti e caso base.

Master Theorem

Classifica in pochi passaggi le ricorrenze bilanciate della forma aT(n/b)+f(n).

Mini-esempio per espansione

Per T(n)=T(n1)+n:

T(n)=T(n2)+(n1)+n =T(1)+i=2ni =Θ(n2)

Questa ricorrenza non è nella forma del Master Theorem, perché la dimensione passa da n a n1, non a n/b.

Master Theorem

Sia

T(n)=aT(n/b)+f(n) a1,b>1,c=logba

Confronta f(n) con nc. Non basta vedere quale sembra più grande: nei casi 1 e 3 la differenza deve essere polinomiale.

Caso Confronto Risultato Intuizione
1 f(n)=O(ncε), per un ε>0 T(n)=Θ(nc) Dominano le foglie.
2 f(n)=Θ(nclogkn), con k0 T(n)=Θ(nclogk+1n) Tutti i livelli contribuiscono.
3 f(n)=Ω(nc+ε), per un ε>0 T(n)=Θ(f(n)) Domina il lavoro vicino alla radice.
Nel caso 3 serve anche la condizione di regolarità: deve esistere una costante q<1 tale che af(n/b)qf(n) per ogni n sufficientemente grande. Impedisce oscillazioni patologiche del lavoro locale.

Procedura pratica

  1. Riscrivi la ricorrenza nella forma aT(n/b)+f(n).
  2. Identifica a, b e f(n). Non confondere b con la dimensione n/b.
  3. Calcola c=logba e quindi nc.
  4. Confronta asintoticamente f(n) e nc, verificando l’eventuale fattore polinomiale.
  5. Se sei nel caso 3, controlla esplicitamente la regolarità.
  6. Scrivi il risultato in notazione Θ, non soltanto O, perché il teorema fornisce un limite asintotico stretto.

Esempi svolti

Ricorrenza nlogba Caso Soluzione
T(n)=T(n/2)+1 n0=1 2, con k=0 Θ(logn)
T(n)=2T(n/2)+n n 2, con k=0 Θ(nlogn)
T(n)=8T(n/2)+n2 n3 1 Θ(n3)
T(n)=7T(n/2)+n2 nlog27 1 Θ(nlog27)Θ(n2.807)
T(n)=3T(n/4)+nlogn nlog43 3, con regolarità Θ(nlogn)

Nell’ultimo esempio log430.792, quindi nlogn è polinomialmente più grande. Inoltre il rapporto 3f(n/4)/f(n) tende a 3/4, dunque la regolarità è soddisfatta per un opportuno q<1.

Quando il Master Theorem non si applica

  • Sottoproblemi di dimensioni diverse: T(n)=T(n/3)+T(2n/3)+n.
  • Riduzione sottrattiva: T(n)=T(n1)+n.
  • Numero di sottoproblemi non costante: per esempio nT(n/2).
  • Divario non polinomiale: funzioni come ncloglogn non rientrano nella versione standard dei tre casi.
  • Regolarità non verificata: il solo fatto che f(n) sia più grande non basta per usare il caso 3.
In questi casi usa espansione, albero di ricorsione o sostituzione. Per ricorrenze divide et impera più generali può essere utile il teorema di Akra–Bazzi.

I pavimenti e soffitti, come T(n/b), vengono spesso omessi durante l’analisi asintotica quando non cambiano l’ordine di crescita; in una dimostrazione rigorosa vanno comunque gestiti.

Errori comuni

  • Applicare il teorema prima di controllare che la ricorrenza abbia davvero la forma richiesta.
  • Confrontare f(n) con logba invece che con nlogba.
  • Dire “caso 1” o “caso 3” per una differenza soltanto logaritmica: quei casi richiedono un divario polinomiale.
  • Dimenticare il fattore logaritmico aggiuntivo nel caso 2.
  • Ignorare il costo di divisione e combinazione quando si costruisce f(n).
  • Usare O quando il risultato ottenuto è il più informativo Θ.

Esercizi con soluzione

1. Ricorrenza di base

Risolvi T(n)=4T(n/2)+n.

Mostra soluzione

a=4, b=2 e nlog24=n2. Poiché f(n)=n, è il caso 1: T(n)=Θ(n2).

2. Fattore logaritmico

Risolvi T(n)=2T(n/2)+nlogn.

Mostra soluzione

nlog22 è n e f(n)=Θ(nlog1n). Caso 2 con k=1: Θ(nlog2n).

3. Domina la radice

Risolvi T(n)=2T(n/2)+n2.

Mostra soluzione

Il termine critico è n, mentre n2 è polinomialmente più grande. La regolarità vale perché 2(n/2)2=n2/2. Caso 3: Θ(n2).

4. Riconosci il limite

Si può applicare il Master Theorem a T(n)=T(n2)+1?

Mostra soluzione

No. La riduzione è sottrattiva, non divisiva. Espandendo si eseguono circa n/2 passi a costo costante, quindi T(n)=Θ(n).

5. Quicksort sbilanciato

Nel caso peggiore, quicksort può generare T(n)=T(n1)+Θ(n). Trova l’ordine di crescita.

Mostra soluzione

L’espansione produce n+(n1)++1. La somma è Θ(n2).

6. Caso di confine

La versione standard qui presentata classifica T(n)=2T(n/2)+nloglogn?

Mostra soluzione

No. Il termine nloglogn è più grande di n, ma non di un fattore polinomiale, e non ha la forma Θ(nlogkn) con k0 costante.

Promemoria: identifica la forma, calcola nlogba, confronta con f(n) e verifica tutte le ipotesi prima di scegliere il caso.