Che cosa significa "la visualizzazione funzionale stateless standard degli algoritmi"?

6

Da La recensione di Kelvin Murphy su Algorithms (4th Edition) di Sedgewick and Wayne

For data structures, it is obviously natural to use classes, but they also adopt this approach for many algorithms, esp. graph processing ones. This allows the algo to do pre-processing and to store internal state, and then to provide a service to the caller. This is more general than the standard stateless functional view of algorithms.

  • Che cosa significa la "vista funzionale stateless degli algoritmi"?

  • Le viste che ho letto da alcuni libri sugli algoritmi sono basate sugli stati degli oggetti. Quindi penso che la vista standard degli algoritmi sia basata sugli stati, corretta?

Grazie.

    
posta Tim 07.10.2016 - 00:44
fonte

1 risposta

14

What does the "stateless functional view of algorithms" mean?

Possiamo pensare ad un algoritmo in astratto come descrizione di un meccanismo che prende determinati input e produce determinati output indipendenti dallo stato del mondo . Se hai un meccanismo chiamato "somma" che prende in 2 e 3 e produce 5, produce sempre 5 quando viene dato 2 e 3, non importa quale sia la fase della luna o chi sia il re di Francia oggi. Non esiste uno "stato" che l'algoritmo debba consultare oltre ai valori forniti come argomenti.

La distinzione che l'autore sta disegnando è che anche in algoritmi che sono "puri" a questo riguardo, è spesso conveniente fare qualche pre-elaborazione, archiviarlo come stato e quindi usare quello stato durante l'operazione di un algoritmo . Anche se risultato è un algoritmo che sembra non dipendere dallo stato del mondo, internamente sta consumando o modificando il proprio universo di stato privato.

I think that the standard view of algorithms are based on states, correct?

La visualizzazione standard degli algoritmi in OO o nei linguaggi procedurali è una sequenza di mutazioni da dichiarare, sì. Ma questa non è la vista standard funzionale . La vista funzionale è che gli algoritmi hanno output che dipendono dagli input e non esiste uno stato mutabile.

È sempre possibile scrivere un algoritmo stateful come algoritmo stateless; basta rendere lo stato uno degli input dell'algoritmo e fare in modo che gli output includano una copia dei "cambiamenti" nello stato; nulla è realmente mutato. Ma è spesso scomodo, inelegante o non performante farlo in pratica.

Naturalmente anche il contrario è vero; molti algoritmi scritti come una sequenza di mutazioni sono vulnerabili a bug sgradevoli in cui le mutazioni vengono eseguite in modo incoerente o fuori uso. Ripensando a un algoritmo come una produzione di valori da input senza mutazioni, puoi ottenere spesso risultati di prestazioni significativi (grazie a persistenza, memoizzazione e così via) e rimuovere fonti di bug.

    
risposta data 07.10.2016 - 01:19
fonte

Leggi altre domande sui tag