Sottostrutture ottime
Rodcut
Il problema del rodcut gode della proprietà della sottostruttura ottima di seguito la dimostrazione:
- Prendiamo una soluzione ottima del problema
- Supponiamo che questa soluzione preveda il taglio dell’asta in due pezzi: uno di lunghezza e uno di lunghezza , il valore di questa soluzione quindi è definito come
- Supponendo per assurdo che non sia ottima, abbiamo quindi un’altra decomposizione con valore più alto
- Quindi otteniamo una nuova soluzione ottima definita in questo modo:
- Visto che allora , questo rappresenta una contraddizione in quanto era già ottima
Matrix
Presa la sequenza di matrici supponiamo che una parentesizzazione migliore di questa sequenza suddivida in questo modo il prodotto: ovviamente anche entrambe le sottosequenze devono essere prarentesizzate in modo ottimo e quindi avremo che: Di seguito la dimostrazione:
- Supponiamo per assurdo che per la prima parte (da a ) esiste una soluzione migliore di quella usata tale che
- Quindi riusciamo a costruire una soluzione migliore nella forma:
- Visto che allora sicuramente ma questa è una contraddizione in quanto la prima soluzione era già ottima
Longest common subsequence
Siano e le sequenze; sia una qualsiasi LCS di e .
- Se , allora e è una LCS di e .
- Se , allora implica che è una LCS di e .
- Se , allora implica che è una LCS di e . Di seguito la dimostrazione
- Visto che deve essere . Ora, il prefisso è una sottosequenza comune di e di lunghezza . Vogliamo dimostrare che questo prefisso è una LCS. Supponiamo per assurdo che ci sia una sottosequenza comune di e di lunghezza maggiore di . Allora, accodando a si ottiene una sottosequenza comune di e la cui lunghezza è maggiore di , che è una contraddizione.
- Se , allora è una sottosequenza comune di e . Se esistesse una sottosequenza comune di e di lunghezza maggiore di , allora sarebbe anche una sottosequenza comune di e , contraddicendo l’ipotesi che sia una LCS di e .
- La dimostrazione è simmetrica a quella del punto (2).
Longest common substring
Se i caratteri e sono uguali, allora la lunghezza del suffisso comune che termina in dipende direttamente dalla lunghezza del suffisso comune che terminava in . Di seguito la dimostrazione:
Supponiamo che . Poiché stiamo cercando una sottostringa, il carattere corrente estende semplicemente ciò che c’era immediatamente prima. Se la soluzione per è una stringa di lunghezza , significa che i caratteri e sono l’ultimo carattere di questa stringa. Se rimuoviamo questo ultimo carattere, rimaniamo con una sottostringa comune di lunghezza che termina agli indici e .
Affinché la soluzione a sia ottima (massima), anche la soluzione a deve essere ottima. Se ci fosse un suffisso comune più lungo a , potremmo aggiungerci (che è uguale a ) ottenendo un risultato migliore per , contraddicendo l’ipotesi iniziale.
Distanza di editing
Tesi: Sia una sequenza ottima di operazioni che trasforma il prefisso nel prefisso . Vogliamo dimostrare che la sottosequenza contenuta in che risolve i sottoproblemi deve essere a sua volta ottima.
Dimostrazione: analizziamo l’ultima operazione effettuata nella sequenza , da qui distinguiamo 3 casi possibili
- L’utlima operazione è una sostituzione, allora è composta da una sottosequenza e da un operazione di sostituzione, allora il suo costo totale è Se per assurdo non è ottima allora esisterebbe con un costo strettamente minore, questo significa che abbiamo trovato una soluzione con un costo minore di , siamo arrivati ad una contraddizione
- Analoga ma con la cancellazione come ultima operazione
- Analoga ma con l’inserimento come ultima operazione
Huffman
Definizioni iniziali:
- : Insieme dei caratteri (soluzione )
- Consideriamo due nodi e (le foglie con frequenza minima) e il loro genitore .
- (soluzione )
Relazioni tra frequenze e profondità:
- e **Costruzione di una relazione tra T e T’TB(T)$, è dato dalla somma delle frequenze per le profondità:
- Espandendo la sommatoria per mettere in relazione con : Nota: Il termine tra parentesi quadre è . Sottraiamo il contributo di (che è in ma non è foglia in ) e aggiungiamo i contributi di e .
- Sostituendo le relazioni di profondità e frequenza ():
- Svolgendo i calcoli, i termini con si cancellano:
- Quindi la relazione fondamentale è: Suppongo che la sottostruttura ottima non esista
- Ipotesi per assurdo: Supponiamo che non sia l’albero ottimo per (e quindi anche che non sia l’albero ottimo per ). Di conseguenza, deve esistere un albero con costo strettamente inferiore a :
- Costruzione dell’albero ridotto: Prendiamo e uniamo le foglie e nel padre . Otteniamo un nuovo albero valido per l’alfabeto ridotto . Il costo di questo albero ridotto è:
- Sviluppo algebrico: Riprendiamo la disuguaglianza del punto 1: Sottraiamo a entrambi i membri la quantità costante : Sostituiamo i termini con le definizioni dei costi ridotti ( e ): Otteniamo infine: Abbiamo dimostrato l’esistenza di un albero con costo inferiore a . Questo contraddice l’ipotesi iniziale che fosse l’albero ottimo per .
Activity selector
Tesi Per dimostrare la sottostruttura ottima, definiamo l’insieme come l’insieme delle attività che iniziano dopo la fine di e finiscono prima dell’inizio di . Supponiamo che una soluzione ottima contenga l’attività . Se questa attività fa parte della soluzione, essa divide il problema in due sottoproblemi:
- Trovare le attività compatibili in (quelle che stanno tra e ).
- Trovare le attività compatibili in (quelle che stanno tra e ). La soluzione totale sarà quindi: . E la sua dimensione sarà: .
Dimostrazione Per dimostrare che la soluzione è ottima, procediamo per assurdo. Supponiamo che la sottoparte non sia ottima. Allora deve esistere un altro insieme più grande (cioè con più attività). Se fosse così, potremmo “tagliare” dalla nostra soluzione originale e “incollarci” . In questo modo otterremmo una soluzione totale più grande di . Ma questo è impossibile, perché avevamo ipotizzato che fosse già la soluzione massima. Questa contraddizione ci conferma che una soluzione ottima deve per forza contenere le soluzioni ottime dei suoi sottoproblemi.
Cammini minimi
Teorema: Dati
- un grafo orientato
- la funzione peso
- sia un cammino minimo dal vertice al per qualsiasi e tali che sia un sotto-cammino di dal vertice al vertice allora è un cammino minimo da a Dimostrazione: Se scomponiamo il cammino in abbiamo . Supponiamo adesso che ci sia un cammino da a con peso . Allora è un cammino da a il cui peso è minore di che contraddice l’ipotesi che sia un cammino minimo da a
Scelta greedy
Huffman
Teorema: possiamo scegliere i due nodi con frequenza più bassa ad ogni passaggio e questa scelta localmente ottima è anche una scelta globalmente ottima Dimostrazione:
- Abbiamo che rappresenta una soluzione ottima, ma in cui la scelta greedy non è stat necessariamente rispettata, quindi e due nodi con la frequenza minima non sono fratelli e si trovano in una posizione qualsiasi
- Prendiamo e due nodi fratelli alla massima profondità dell’albero, su questi nodi possiamo dire che:
- e
- e
- Creaiamo un nuovo albero uguale a ma con e scambiati (stessa cosa per e ). Ricordando che il costo di è deifnito come di seguito vediamo quanto ci è costato passare da a :
B(T)-B(T') = f(x)d_T(x)+f(a)d_T(a)-[f(x)d_T(a)+f(a)d_T(x)]$$$$B(T)-B(T') = f(x)(d_T(x)-d_T(a))+f(a)(d_T(a)-d_T(x))$$$$B(T)-B(T') = (f(a)-f(x))*(d_T(a)-d_T(x))Analizzando i segni
- le frequenze
- la profondità Poiché stiamo moltiplicando due numeri non negativi abbiamo che: visto che e sono uguali allora il loro costo sarà lo stesso. Questo dimostra che la scelta greedy è sicura.
Activity Selector
Generalità: Le attività in sono ordinate in modo crescente in base al tempo di fine Teorema: Consideriamo un sottoproblema non vuoto e sia l’attività in che ha il primo tempo di fine; allora l’attività è inclusa in qualche sottoinsieme massimo di attività mutuamente compatibili di (prendiamo quella con il tempo di fine più basso). Dimostrazione: Supponiamo che sia un sottoinsieme massimo di attività mutuamente compatibili di e sia l’attività in con il più piccolo tempo di fine.
- Se , abbiamo finito (l’attività golosa è già nell’insieme ottimo).
- Se , costruiamo l’insieme (sostituiamo con ).
- Le attività in sono disgiunte perché lo è anche e (poiché è la scelta golosa).
- Poiché , concludiamo che è un sottoinsieme massimo che include .
Dimostrazioni generiche
Hashing con concatenazione
Ricerca senza successo: una ricerca senza successo richiede un tempo di nel caso medio Dimostrazione: Il tempo atteso per ricercare senza successo una chiave è il tempo atteso per svolgere ricerche fino alla fine della lista che ha lunghezza attesa di quindi il tempo totale richiesto (incluso quello per calcolare che ipotizziamo sia ) è Ricerca con successo: una ricerca con successo richiede un tempo di nel caso medio Dimostrazione: il numero di elementi esaminati durante una ricerca con successo di un elemento è uno in più del numero di elementi che si trovano prima di nella lista di . Gli elementi prima di li troviamo facendo: Ricordiamo che . Dunque il numero atteso di elementi esaminati con successo è:Di seguito la risoluzione: - Distribuiamo la sommatoria dentro la parentesi e sostituiamo : - Riscrivo la prima sommatoria semplicemente come e sposto fuori la costante : - Riscrivo la sommatoria con come : - Riscrivo le sommatorie come differenza di sommatorie - Risolvo le sommatorie - Risolvo i calcoli rimanenti
Hashing con indirizzamento aperto
Ricerca senza successo: data una tavola hash con un fattore di carico il numero atteso di ispezioni in una ricerca senza successo è al massimo
Dimostrazione: 
Ricerca con successo: data una tavola hash con un fattore di carico il numero atteso di ispezioni in una ricerca senza successo è al massimo
Dimostrazione: 
Altezza massima
Definizione altezza massima: l’altezza massima di un albero rosso-nero con nodi interni è
Dimostrazione: Iniziamo dimostrando che il sottoalbero con radice in un nodo qualsiasi contiene almeno nodi interni, lo faremo per induzione:
- caso base: Se l’altezza di è allora deve essere una foglia e il sottoalbero con radice in contiene:
- passo induttivo: consideriamo un nodo che ha un altezza positiva ed è quindi un nodo interno con due figli.
Possiamo dire che ogni figlio ha un altezza nera pari a:
- se rosso ha
- se nero ha (perché escludo il nodo stesso dal conteggio) Poiché l’altezza di un figlio di è minore dell’altezza di possiamo applicare l’ipotesi induttiva per concludere che ogni figlio ha almeno e quindi possiamo concludere che il sottoalbero con radice in contiene: $$ \underbrace{(2^{bh(x)-1}-1)}{\text{nodi interni albero sx}} + \underbrace{(2^{bh(x)-1}-1)}{\text{nodi interni albero dx}} + 1 = 2^{bh(x)} - 1 ;\text{nodi interni}