Menu
Coddy logo textTech

Riepilogo dei concetti chiave

Lezione 14 di 15 del corso Programmazione dinamica 101 di Coddy.

In questa lezione, ripasseremo i concetti chiave trattati nel corso Dynamic Programming 101.

  1. Programmazione dinamica: la programmazione dinamica è una tecnica per risolvere problemi di ottimizzazione scomponendoli in sottoproblemi più semplici e risolvendo ogni sottoproblema una sola volta.
  2. Memoizzazione: la memoizzazione è una tecnica per evitare calcoli ridondanti memorizzando i risultati delle chiamate a funzione costose e restituendo il risultato memorizzato nella cache quando si ripresentano gli stessi input.
  3. Tabulazione: la tabulazione è una tecnica per risolvere problemi di programmazione dinamica compilando iterativamente una tabella o un array di soluzioni, fino a raggiungere la soluzione finale.
  4. Sottostruttura ottimale: un problema presenta una sottostruttura ottimale se la sua soluzione ottimale contiene al suo interno soluzioni ottimali dei suoi sottoproblemi.
  5. Sottoproblemi sovrapposti: un problema presenta sottoproblemi sovrapposti se può essere scomposto in sottoproblemi che condividono sotto-sottoproblemi.
  6. Ottimizzazione dello spazio: l'ottimizzazione dello spazio è una tecnica per ridurre i requisiti di memoria di un algoritmo di programmazione dinamica tenendo traccia solo dello stato necessario.
  7. Mascheramento di bit: il mascheramento di bit è una tecnica che usa la manipolazione dei bit per rappresentare un insieme di elementi come un numero binario.
  8. Potatura: la potatura è una tecnica usata per ridurre il numero di calcoli richiesti da un algoritmo di programmazione dinamica evitando calcoli non necessari.
challenge icon

Sfida

Medio

Sfida di ripasso: percorso a costo minimo

Ti viene data una griglia n x n che rappresenta una mappa della città. Ogni cella della griglia rappresenta un incrocio stradale e i valori nelle celle rappresentano il costo per attraversare quell'incrocio. Vuoi viaggiare dall'angolo in alto a sinistra della griglia a quello in basso a destra e puoi muoverti solo verso il basso o verso destra a ogni incrocio.

Scrivi una funzione min_cost_path(grid) che riceve la griglia come input e restituisce il costo minimo per attraversarla dall'angolo in alto a sinistra a quello in basso a destra.

Per esempio:

grid = [
	[1, 3, 1],
	[1, 5, 1],
	[4, 2, 1]
]

min_cost_path(grid) => 7

Spiegazione: il percorso a costo minimo è 1 -> 3 -> 1 -> 1 -> 1, con un costo totale di 7.

Provalo tu

def min_cost_path(grid):
    # Scrivi il codice qui

Tutte le lezioni di Programmazione dinamica 101

Esercitati da solo: Compilatore Python online