Induzione parametrica - limitazioni esatte delle ricorrenze
In questa pagina 7
Lo srotolamento di una ricorrenza (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 →) funziona per taglie e dà una formula chiusa. Per qualunque, con parti intere e , la forma esatta può essere difficilissima da trovare. Allora si formula un'ipotesi (un guess) sull'andamento e si cerca di dimostrarla rigorosamente: è l'induzione parametrica.
La formula chiusa trovata per suggerisce l'ordine di grandezza (non le costanti) per tutti gli , se la ricorrenza è abbastanza regolare, perché fornisce un campionamento infinito dei valori. Per l'ordine di grandezza di una classe ampia di ricorrenze c'è anche un teorema pronto: Master Theorem - enunciato, casi e applicazioniMaster Theorem per T(n) = aT(n/b) + w(n): si confronta w(n) con la funzione soglia n^(log_b a). Caso 1 (w minore di una potenza polinomiale): Theta(n^(log_b a)); caso 2 (w della stessa taglia): Theta(n^(log_b a) log n); caso 3 (w maggiore e regolare): Theta(w(n)). Prova completa dai livelli dell'albero, versione estesa (parti intere, n0 qualsiasi), esempi, e l'uso scorretto quando nessun caso si applica (w = n log n).Master Theorem - enunciato, casi e applicazioni →.
Il metodo
Si simula la verifica per induzione su una formula chiusa le cui costanti non sono fissate ma sono parametri da determinare alla fine. Lungo la prova si accumulano vincoli sui parametri, tali che tutti i passaggi siano corretti. Per esempio, per una funzione che si ipotizza limitata da una retta, il guess è cioè (o ); se si provano entrambe le disuguaglianze si ottiene . La disuguaglianza è un insieme infinito di guess (uno per ogni ) ma e sono sempre gli stessi.
I passi, in ordine:
- Base [B]. Si impone il guess sui valori di base di : ogni di base dà un vincolo.
- Ipotesi [HP]. Si assume il guess per tutti gli argomenti minori di .
- Passo [HP TH]. Si applica la definizione implicita di per ottenere argomenti più piccoli; si usa [HP]; si semplifica il più possibile con uguaglianze o maggiorazioni (valide per tutti i valori dei parametri); alla fine si scrive la disequazione condizionale il cui verificarsi, per certi valori di , permette di concludere la tesi. Il simbolo distingue una condizione sui parametri da una maggiorazione sempre vera.
- Intersezione. Se l'insieme dei vincoli è non vuoto, ogni coppia ammissibile trasforma la prova in una normale induzione. Per un limite superiore conviene il più piccolo possibile (miglior costante del termine dominante); per uno inferiore il più grande.
Un'avvertenza essenziale: il procedimento non è infallibile. Se il guess è falso l'insieme dei vincoli è certamente vuoto, ma può essere vuoto anche per un guess vero, quando lo strumento non è abbastanza potente. Il fallimento non prova che il guess sia falso. Dopo aver finito, conviene confermare il risultato con una verifica per induzione standard, per individuare errori di calcolo.
Esempio 1: limite superiore per MAX
La ricorrenza di MAX, valida per ogni , è Guess: con per ogni .
[B] : . Vincolo: .
[HP TH] Per , si applica la definizione implicita e poi [HP] ai due argomenti , entrambi minori di e : perché . Per ottenere la tesi basta che Vincolo: .
Intersezione dei vincoli. Il sistema , ha infinite soluzioni nel piano ; sono i punti nella regione colorata:
Grafico interattivo: Vincoli sul piano (c, d): c + d >= 0 e d <= -1. Il punto (1, -1) ha il c più piccolo
Dei punti ammissibili conviene il minimo, perché è il coefficiente del termine dominante: dal vincolo e segue , il minimo è e per la scelta è obbligata, . Si ottiene
Esempio 2: limite inferiore per MAX
Si cerca per opportuni .
- [B] . Vincolo: .
- [HP TH] , e basta , cioè .
- Per un limite inferiore si vuole massimo: da e segue , quindi e .
Quindi , che con l'Esempio 1 dà per ogni . Attenzione: è un caso fortunato. Di solito i limiti inferiore e superiore non coincidono nelle costanti e la forma analitica esatta non si trova.
Esempio 3: quando il guess più semplice fallisce
Per MAX si provi il guess più semplice , vero con (perché ).
- [B] : vincolo .
- [HP TH] , e la condizione non è soddisfatta da nessun .
L'intersezione è vuota, anche se il guess è vero per infiniti valori di : con un solo parametro lo strumento non basta, il termine del passo non si assorbe. L'aggiunta del termine di ordine inferiore (con ) lo risolve. Regola pratica: si prova prima il guess con un solo parametro, e si passa a più parametri (processo più complicato) solo dopo un fallimento.
Esempio 4: un guess con
(il lavoro per il Conquer è come nel merge sort). Dal Master Theorem ci si aspetta . Il guess cade già alla base: per vale , qualunque sia . Serve un termine lineare: si prova
- [B] . Vincolo: .
- [HP TH] Per si ha , quindi [HP] vale per : Ora è non decrescente per e , quindi ; inoltre e . Allora Vincoli: , . Il limite superiore con minimo è , : che per vale con l'uguaglianza (srotolando: ).
import math
from functools import lru_cache
@lru_cache(None)
def T(n):
return 1 if n == 1 else 2 * T(n // 2) + n
assert all(T(n) <= n * math.log2(n) + n + 1e-9 for n in range(1, 20001))
assert all(T(2**k) == 2**k * k + 2**k for k in range(20))Errori comuni
- Far dipendere o da : le costanti sono fisse e il guess vale per tutti gli .
- Usare [HP] per argomenti non minori di , o dimenticare che gli argomenti delle chiamate (per esempio ) devono restare per poter applicare [HP].
- Perdere vincoli della base: se la base contiene più valori di , ciascuno dà un vincolo e vale il più stringente.
- Concludere "il guess è falso" perché l'intersezione è vuota: può solo essere troppo debole (manca il termine di ordine inferiore).
- Scegliere al passo [TH] senza minimizzarlo: per un limite superiore il migliore è il minimo ammissibile.
Domande d'esame
- Si provi con l'induzione parametrica una limitazione superiore per , . Traccia: base ; passo ; scelta , .
- Perché con il guess l'induzione parametrica fallisce, e questo prova che è falso? Traccia: dal passo si ottiene , impossibile; ma il guess è vero con (perché ): lo strumento è solo troppo debole.
- Esercizi completi con parti intere: Esercizio - ricorrenza con parti intere, Master Theorem e induzione parametrica (simulazione d'esame 2025-26, es. 1) e Esercizio - induzione parametrica con parti intere e limite lineare (compito del 9 luglio 2025, es. 1).
Versione ripasso
- Idea: si simula la verifica per induzione di un guess con costanti parametriche (es. ) e si raccolgono i vincoli: dalla base (uno per ogni di base) e dal passo [HP TH] (la condizione ). Se l'intersezione è non vuota si sceglie la coppia: per un limite superiore minimo, per uno inferiore massimo.
- MAX, superiore: base ; passo (usa ); scelta : .
- MAX, inferiore: base ; passo ; : . Quindi per ogni (caso fortunato).
- Fallimento: guess dà (vincolo vuoto) pur essendo vero con : strumento troppo debole, non guess falso. Si prova prima con un parametro, poi si aggiungono.
- Con : , . Guess cade in base (); con : base , passo cioè (usa non decrescente); .
- Verifica finale con induzione standard per scovare errori di calcolo.
- Errori tipici: costanti dipendenti da ; [HP] su argomenti non minori o fuori dalla base; dimenticare il vincolo più stringente della base; scambiare "vincolo vuoto" con "guess falso"; non minimizzare .
- Passi: (1) base: un vincolo per ogni di base; (2) [HP] per gli argomenti ; (3) applicare la definizione, usare [HP], semplificare con maggiorazioni sempre vere e scrivere la condizione ; (4) intersecare i vincoli e scegliere la coppia migliore; (5) verificare con induzione standard. Il guess è un insieme infinito di guess con sempre gli stessi.
- Regione ammissibile (MAX): nel piano i punti con e ; il minimo è con obbligato. Guess troppo semplice: aggiungere un termine di ordine inferiore; parti intere: usare , , .
- Se non si vede: l'ordine di grandezza si suggerisce con la formula chiusa per (srotolamento in 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 →) o con Master Theorem - enunciato, casi e applicazioniMaster Theorem per T(n) = aT(n/b) + w(n): si confronta w(n) con la funzione soglia n^(log_b a). Caso 1 (w minore di una potenza polinomiale): Theta(n^(log_b a)); caso 2 (w della stessa taglia): Theta(n^(log_b a) log n); caso 3 (w maggiore e regolare): Theta(w(n)). Prova completa dai livelli dell'albero, versione estesa (parti intere, n0 qualsiasi), esempi, e l'uso scorretto quando nessun caso si applica (w = n log n).Master Theorem - enunciato, casi e applicazioni →; poi l'induzione parametrica dà la costante.
- Domande tipiche: vincoli e scelta di per MAX; perché fallisce senza che il guess sia falso; guess con termine .
Esercizi su questo argomento
- Esercizio - induzione parametrica con parti intere e limite lineare (compito del 9 luglio 2025, es. 1)
- Esercizio - prodotto di matrici complesse, ricorrenza e induzione parametrica (compito del 8 luglio 2024, es. 1)
- Esercizio - ricorrenza con parti intere, Master Theorem e induzione parametrica (simulazione d'esame 2025-26, es. 1)