Programmazione dinamica Flashcards
Quali sono le differenze rispetto alla ricorsione?
La programmazione dinamica è destinati a problemi di ottimizzazione che hanno una struttura ottima, segue un approccio bottom-up, prima di risolvere un problema controlla se è già stato fatto.
C’è anche la memoization che è top-down.
Quali sono i passi per arrivare a una soluzione ottima?
Verifica di applicabilità + soluzione ricorsiva per il valore + ricostruzione bottom-up iterativa della soluzione
Quando si ha una struttura ottima?
Quando la struttura può essere divisa in sottostrutture anche esse ottime nel senso che sono ottime le soluzioni ai sottoproblemi
Come si calcola in generale la complessità?
Theta(num di sottoproblemi * costo di ricombinazione)
Come funziona la memoization?
Attraverso il look up controlla se la soluzione esiste già e per questo deve memorizzare le sol ai sottoproblemi
unsigned long fib (int n, unsigned link *knownF);
Che caratteristiche ha il P. Greedy?
Non sempre trova una soluzione ottima ma è meno complesso.
Come funziona il P. Greedy?
A ogni passo sceglie una soluzione localmente ottima che non rivaluta più. La scelta viene fatta in base all’appetibilità
Codici Huffamn: lunghezza
- fissa: n°bit = parte intera di log_2(card(S)) dove card(S) è il numero di tutti i bit che bisogna codificare
- variabile: più difficile, meno memoria, frequenze diverse
Codici di Huffman: vincolo
nessun codice è prefisso di un altro codice