In generale, la soluzione di programmazione dinamica può essere dimostrata mostrando che la soluzione presenta la proprietà della sottostruttura ottimale.
Fondamentalmente, si formula il problema reale come composto da sottoproblemi più piccoli e quindi si combinano le soluzioni per ottenere la risposta finale. Nella combinazione, se la dimensione del problema aumenta, la soluzione per sottoproblemi più piccoli deve essere ancora ottimale affinché la combinazione funzioni effettivamente.
Ad esempio, se in un grafico stai cercando di trovare il percorso più breve tra A e C e sai già (in qualche modo) che quel percorso passa attraverso un punto intermedio B, e sai già il modo più breve per ottenere da A a B, quindi devi solo trovare un modo più breve per arrivare a C da B. Non devi preoccuparti di trovare un nuovo modo da A a C, questo è ciò che significa la proprietà di sottostruttura ottimale. Per una prova di correttezza della programmazione dinamica, dimostrare questa proprietà è sufficiente per dimostrare che il tuo approccio è corretto.
Il modo in cui provi l'algoritmo di Greedy mostrando che mostra che la struttura matroid è corretta, ma non sempre funziona. Alcuni algoritmi greedy non mostreranno la struttura di Matroid, tuttavia sono algoritmi corretti di Greedy. Ad esempio, lo schema di codifica di Huffman è un approccio avido, ma non mostra una struttura matroid.
Per dimostrare un algoritmo ingordo, in generale, devi dimostrare che la tua soluzione esibisce -1) proprietà di sottostruttura ottimali come in DP e 2) La scelta fatta da un approccio avido non è sub-ottimale (in pratica mostra che è ottimale o una delle scelte ottimali che possono essere fatte in quel momento)