Esercizio - induzione parametrica con parti intere e limite lineare (compito del 9 luglio 2025, es. 1)
In questa pagina 3
Testo (compito d'esame del 9 luglio 2025 di Algoritmi per l'Ingegneria, Ing. Informatica UniPD, seconda parte, esercizio 1, 16 punti). Si consideri la seguente relazione di ricorrenza definita per valori arbitrari positivi del parametro : Utilizzando l'induzione parametrica, determinare una costante per cui per ogni .
Teoria usata: Induzione parametrica - limitazioni esatte delle ricorrenzeL'induzione parametrica prova una limitazione T(n) <= cn+d (o >=) con costanti c e d incognite: si simula la verifica per induzione, si raccolgono i vincoli su c e d dalla base e dal passo HP => TH, e se l'intersezione non è vuota si sceglie la coppia migliore. Per MAX dà esattamente T(n) = n-1; può fallire anche con guess veri (si aggiunge un parametro o un termine di ordine inferiore).Induzione parametrica - limitazioni esatte delle ricorrenze →, 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 →.
Il guess (, lineare) è dato dal testo. Il lavoro è nel passo: bisogna maggiorare le parti intere in modo da ottenere una disequazione in e , e risolverla per tutti gli che entrano nel passo ().
Vincolo dalla base
Per : . Il più stringente è :
Passo induttivo
Ipotesi. per ogni , con , cioè .
Gli argomenti sono ammessi. Per : e ; e . Quindi l'ipotesi si applica a entrambi (l'argomento non scende mai sotto , dove il guess è definito). Si ricava
Maggiorazione delle parti intere (valida per ogni valore di ). Si ha e , quindi . La versione semplice usa solo : Il passo riesce se , cioè
Come risolvere la disequazione. Per ogni si vuole . Il lato destro decresce con , quindi il caso peggiore è il più piccolo del passo, : Equivalente geometrico: il fascio di rette (tutte per l'origine) deve stare sopra la retta per tutti gli ; basta imporlo in : . Equivalente algebrico: da segue , quindi e basta , cioè .
Intersezione dei vincoli. (base) e (passo): si sceglie .
Una costante migliore:
La soluzione del corso si ferma a , che è valida. Si può fare meglio con una maggiorazione più fine, mantenendo (perché ): Il lato destro è minore di per ogni : quindi soddisfa il passo per tutti gli , e la base chiede già . Ne segue , e è la costante ottima, perché obbliga . L'esito del metodo semplice è dunque una condizione sufficiente ma non la migliore possibile: l'induzione parametrica dà una costante che dipende dalla finezza con cui si maggiorano le parti intere.
Controlli numerici. I primi valori sono , , , (cioè per ); i rapporti valgono per , per , per , e tendono a per (se : , quindi ). Con un programma si è verificato per e il massimo di è ().
from functools import lru_cache
@lru_cache(None)
def T(n):
return 12 if n <= 5 else T(n // 3) + 2 * T(-(-n // 4) - 1) + 2 * n + 1
assert all(T(n) <= 12 * n for n in range(1, 300000))
assert all(-(-n // 4) - 1 >= 1 for n in range(6, 10000)) # argomento >= 1
print([T(n) for n in range(6, 13)]) # [49, 51, 53, 55, 57, 59, 61]Versione ripasso
Testo. per ; per . Con l'induzione parametrica trovare tale che per ogni [16 punti].
- Base: per , il più stringente : .
- Passo (): argomenti e , entrambi : l'ipotesi si applica. Con e : ; il caso peggiore è : (equivalente: retta sopra in ; oppure ).
- Scelta: , .
- Più fine: dà , minore di : basta , ottima perché . Quindi ; .
- Controlli: ; .
- Errori tipici: dimenticare che per usare l'ipotesi; imporre il vincolo del passo con invece del primo del passo; scegliere senza controllare il passo; dimenticare il vincolo della base.