Cosa significa dire che un algoritmo è Sound and Complete?


33

Ho ascoltato diverse interpretazioni del suono e complete . Capisco che completezza significa trovare una soluzione se ce n'è una. Cosa significa che un algoritmo è sano .

Cosa significa dire che un algoritmo è Sound and Complete?


Ti suggerisco di rivalutare quale risposta hai accettato dato che uno è sbagliato.
BlackJack,

Ho appena fatto questo :)
Mutelogan,

Risposte:


50

Questi sono termini molto specifici in relazione alla logica.

Ecco alcuni punti di partenza:

http://en.wikipedia.org/wiki/Soundness

http://en.wikipedia.org/wiki/Completeness_(logic)

Fondamentalmente, la solidità (di un algoritmo) significa che l'algoritmo non produce alcun risultato falso. Se, ad esempio, ho un algoritmo di ordinamento che a volte non restituisce un elenco ordinato, l'algoritmo non è valido.

La completezza, d'altra parte, significa che l'algoritmo si rivolge a tutti gli input possibili e non ne perde nessuno. Quindi, se il mio algoritmo di ordinamento non restituisse mai un elenco non ordinato, ma si rifiutasse semplicemente di lavorare su elenchi che contenevano il numero 7, non sarebbe completo.

È completo e valido se funziona su tutti gli ingressi (semanticamente validi nel mondo del programma) e ottiene sempre la risposta giusta.


Grazie. Ero davvero confuso su cosa significhi solidità . Stavo ottenendo risposte multiple.
Mutelogan,

Felice se ha aiutato ... :)
Erik Dietrich,

13
Un esempio potrebbe essere la ricerca binaria, è sana, ma non è completa. Non può funzionare su elenchi non ordinati.
Malfist,

3
@Malfist ma non sono gli elenchi ordinati "world of the program"?
Andres,

1
"Un algoritmo si comporta in modo errato su input non validi" non influisce sulla solidità o completezza, quindi né la ricerca binaria né i tipi di confronto sono rilevanti: entrambi gli algoritmi sono validi e completi per input validi.
Blaisorblade,

15

Trovo la risposta di Erik Dietrich un po 'confusa. Quanto segue è meglio:

Un algoritmo è valido se, ogni volta che restituisce una risposta, quella risposta è vera. Un algoritmo è completo se garantisce di restituire una risposta corretta per qualsiasi input arbitrario (o, se non esiste una risposta, garantisce di restituire un errore).

Due punti importanti:

  1. La solidità è una garanzia debole. Non promette che A terminerà.
  2. Solidità e completezza sono concetti correlati; infatti sono il contrario logico l'uno dell'altro. cioè, Soundness afferma che se viene restituita una risposta, quella risposta è vera. La completezza afferma che una risposta è vera se viene restituita.

Consideriamo ad esempio un algoritmo di ordinamento A che riceve come input un elenco di numeri. Diciamo che A è valido se ogni volta che restituisce un risultato quel risultato è un elenco ordinato. Allo stesso modo, diciamo che A è completo se garantisce di restituire un elenco ordinato ogni volta che gli forniamo un elenco di numeri.


Perché sei confuso? "Un algoritmo è valido se, ogni volta che restituisce una risposta, quella risposta è vera." significa lo stesso di "Fondamentalmente, la solidità (di un algoritmo) significa che l'algoritmo non produce alcun risultato che è falso." Significano la stessa cosa. Per quanto riguarda la tua (molto breve) definizione di completezza, non corrisponde a nulla nel link di Wikipedia e non citi alcun riferimento tuo. Devo dire che le definizioni di Erik sono più utili dal punto di vista pratico. Se i tuoi sono corretti, devi fornire prove migliori e più carne.
itsbruce,

1
Giusto per chiarire, quando dici "La completezza dice che una risposta è vera se viene restituita", intendi che la risposta è "corretta", giusto?
Dois,

1
"Una risposta è vera se viene restituita" significa letteralmente come "se una risposta viene restituita è vera". Inoltre, le risposte non possono essere "vere", solo corrette. softwareengineering.stackexchange.com/a/311649/21277 è più corretto.
Blaisorblade,

2

Questi termini derivano dalla teoria del calcolo, quindi sono più significativi nel contesto della teoria del calcolo che nel contesto dell'ingegneria del software

Nella maggior parte dei modelli standard di calcolo, i problemi informatici sono rappresentati come lingue . Una lingua è un insieme di stringhe. Un algoritmo, quindi, è solo un sistema o una procedura che decide se una determinata stringa è un membro di un linguaggio (restituendo vero o falso). In termini di ingegneria del software, la teoria del calcolo si occupa in particolare di funzioni simili a queste, supponendo che le stringhe siano immutabili:

boolean some_function(string argument){...}

Chiamiamo questa funzione completa se restituisce vero per ogni argomento che è un membro della lingua. Lo chiamiamo suono se restituisce falso per ogni argomento che non è un membro della lingua.

In altre parole, è completo se ritorna sempre vero quando vogliamo che ritorni vero e suono se restituisce sempre falso quando vogliamo che ritorni falso.

Come si traduce in altri tipi di funzioni? A quanto pare, è quasi sempre possibile inserire una quantità arbitraria di dati in una stringa e ricostituirla all'interno della funzione. Quindi la restrizione sul tipo di argomento e sull'arità non è altro che una semplificazione teorica. La restrizione sul tipo di restituzione è tuttavia più importante. I problemi che richiedono un risultato booleano sono chiamati problemi di decisione . Molta teoria del calcolo comporta problemi di decisione; gli insiemi P e NP sono limitati a problemi di decisione (e NP, almeno, non potrebbe essere ragionevolmente definito senza questa restrizione). Il problema dell'arresto è un altro esempio di un problema decisionale molto studiato.

Ritengo che questi termini non si generalizzino al di fuori del dominio dei problemi decisionali, quindi la differenza tra loro non è davvero significativa quando si discute di una funzione generale.


-2

Ci sono risposte molto migliori alla comunicazione degli addebiti . Fondamentalmente, fornisci alcuni dati di raccolta e criteri per la ricerca. L'algoritmo del suono ti cattura solo il pesce che soddisfa i criteri, ma potrebbe mancare alcuni elementi di dati. L'algoritmo completo produce un superset di risultati richiesti, il che significa che si riceve un po 'di spazzatura oltre ai risultati richiesti. L'algoritmo del suono è più conservativo.

Lo statistico direbbe probabilmente che l'algoritmo del suono è distorto da errori di tipo I (non accetta i candidati corretti), mentre l'algoritmo completo è distorto dagli errori di tipo II (per accettare i falsi candidati).

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.