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?
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?
Risposte:
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.
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:
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.
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.
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).