Timeline
Chat
Prospettiva

Algoritmo di Davis-Putnam

algoritmo per controllare la validità di una formula logica Da Wikipedia, l'enciclopedia libera

Remove ads

L'algoritmo di Davis-Putnam fu sviluppato da Martin Davis e Hilary Putnam allo scopo di verificare la soddisfacibilità booleana (SAT) di formule di logica proposizionale in forma normale congiuntiva (CNF). È un tipo di procedimento di risoluzione nel quale le variabili sono scelte iterativamente ed eliminate, risolvendo ogni clausola in cui questa compaia diretta con ogni clausola in cui compaia negata.

L'algoritmo DP è stato il primo algoritmo per la risoluzione di problemi SAT. Ma questo in generale è molto inefficiente poiché richiede un uso esponenziale della memoria, quindi è adatto a problemi di piccole dimensioni. La sua evoluzione è un algoritmo di ricerca chiamato DPLL. A volte l'algoritmo di Davis–Putnam o DP è scorrettamente usato in riferimento DPLL, ma questi due sono ben distinti.

Remove ads

Definizione

Riepilogo
Prospettiva

L'algoritmo funziona nel seguente modo:

 1) elimino tutte le clausole con un solo letterale (unit propagation) |→
        - se la formula contiene le clausole (x) e (¬x) |→ la formula è insoddisfacibile.
        - se la formula contiene la clausola (x) |→
              • elimino tutte le clausole che contengono x.
              • elimino il letterale (¬x) da tutte le altre clausole.
        - se la formula è vuota |→ la formula è soddisfacibile.
 2) per un letterale puro, nella formula compare solamente (x) e non (¬x) |→ assegno x=true
 3) eliminazione di variabili per risoluzione |→
        - per ogni variabile nella formula, ad esempio x |→
              • si producono delle clausole del tipo (A  B), a partire da coppie (x  A) e (¬x  B).
        - una volta risolte ogni coppia di clausole possibili per la variabile x, vengono eliminate tutte le clausole che contengono x e ¬x.

Qui letterale e variabile hanno lo stesso significato.

In generale se ho n clausole che contengono il letterale x e m clausole che contengono il letterale ¬x, eliminerò (n+m) clausole dalla formula, ma per farlo dovrò aggiungere le (n*m) clausole generate. Per questo l'algoritmo ha un notevole consumo di memoria.

Remove ads

Esempio

Riepilogo
Prospettiva

Vogliamo verificare se la seguente formula è soddisfacibile.

 (ab)  (¬ab)  (¬ad)  (c)  (¬cb¬d)  (cd)  (a¬d)

1) Eliminiamo le clausole con un solo letterale.

 (ab)  (¬ab)  (¬ad)  (c)  (¬cb¬d)  (cd)  (a¬d) →
 (ab)  (¬ab)  (¬ad)  (b¬d)  (a¬d)

2) Assegnamo True ai letterali puri. Abbiamo un solo letterale puro, b. Possiamo quindi eliminare tutte le clausole in cui compare b.

 (ab)  (¬ab)  (¬ad)  (b¬d)  (a¬d) →
 (¬ad)  (a¬d)

3) Sono rimasti due letterali da risolvere. Scegliamo il letterale a. L'ultima formula può essere riscritta come:

 (¬ada¬d) →
 (¬ada¬d) →
 (d¬d) →
 ()

Alla fine otteniamo una formula vuota, quindi la formula originale è soddisfacibile.

Remove ads

Bibliografia

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads