"Leggi input dell'utente": potrebbe essere un passo di un algoritmo?

3

Basato su questa definizione di algoritmo da Wikipedia:

In mathematics and computer science, an algorithm is a self-contained step-by-step set of operations to be performed. Algorithms exist that perform calculation, data processing, and automated reasoning.

An algorithm is an effective method expressed as a finite list of well-defined instructions for calculating a function. Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a finite number of well-defined successive states, eventually producing "output" and terminating at a final ending state.

"Wait for user input" o semplicemente read() ha conteggiato un passo dell'algoritmo?

Ho pensato per i seguenti motivi che potrebbero non rientrare nella definizione:

  • Sembra che non sia un passo che può essere eseguito mentre un'operazione viene eseguita.
  • Dovrebbe attendere il completamento di un segnale esterno, potrebbe essere contrario all'auto-contenuto nella definizione.
  • Inoltre la definizione parla di un input iniziale, quindi suppongo che l'input debba essere già fornito.

Sono corretto?

Aggiornamento: se non è un passo, come rappresenterebbe la seguente sequenza, è un algoritmo?

  • X = 5
  • Y = X + 4
  • if (Y > 10) Z = Read () // ottiene l'input dell'utente
  • else Z = 1
  • if (Z > 2) Z = Z + X

Si noti che la lettura si verifica in modo condizionale, quindi potremmo non supporre che l'input debba essere già fornito.

    
posta Ahmad 11.02.2015 - 09:05
fonte

3 risposte

5

Quella definizione di "algoritmo" è estremamente ristretta. Si applica solo agli algoritmi deterministici digitali a piccoli passi non interattivi.

Tuttavia, gli algoritmi non devono essere digitali (consistenti in passi discreti e operanti su valori discreti). Possono anche essere continui (consistenti in passi discreti e operanti su valori continui) o analogici (avanzamento continuo e funzionamento su valori continui). Possono essere non deterministici (in realtà, si scopre che il non-determinismo è solo una forma di interattività). Possono essere interattivi (cioè interagire con un ambiente). Possono essere paralleli (cioè a passo largo).

Ad esempio, il semplice algoritmo "secchio di pioggia". Questo è un algoritmo digitale interattivo in piccoli passi:

  1. ogni mattina alle 8:00 metti un secchio nel cortile.
  2. ogni sera alle 20:00 misurate la quantità di pioggia nel secchio, in grammi, troncata a un intero.

Questo è un algoritmo perfettamente valido. Ha anche passaggi e opera su valori discreti (che non è nemmeno necessariamente necessario perché sia considerato un algoritmo).

È, tuttavia, interattivo. Dipende da qualche ambiente al di fuori dell'algoritmo. Matematicamente, nella teoria degli algoritmi, questo è modellato come un oracolo.

Quindi, per rispondere alla tua domanda: sì, quello che hai lì, è un algoritmo interattivo, e la lettura è sicuramente una parte di esso.

    
risposta data 11.02.2015 - 15:14
fonte
5

No. Non lo è.

Come una funzione matematica , un algoritim trasforma elementi da un set sorgente di informazioni ad un set di destinazione . Questo funziona indipendentemente dalle origini del set sorgente : se deriva dall'input dell'utente (tastiera o altro), da un file che contiene le informazioni o dalle schede perforate. L'input appartiene alle precondizioni di un algortihm: senza input non c'è bisogno di calcolo ; ma il metodo di raccolta dell'input è trascurabile e non appartiene all'algoritmo stesso.

Aggiorna : È possibile sostituire la parte di lettura stessa con accesso a un array a[0] . I dati recuperati / risultati dalla lettura sono parte dell'algoritmo, la lettura non stessa. Come ho detto: la fonte non ha importanza. Anche se la lettura è parte della logica del tuo programma.

Prendiamo ad esempio un algoritmo di ordinamento. Un algoritmo di ordinamento è un numero ben definito di passaggi su un set da ordinare. L'origine del set non ha nulla a che fare con l'algoritmo, sebbene ogni implementazione debba occuparsi del problema, da dove recuperare i dati.

Ovviamente è un po 'accademico o si potrebbe dire: filosofico.

    
risposta data 11.02.2015 - 09:19
fonte
0

Penso che rispondere a questa domanda dipenda dalla nostra definizione di "algoritmo"

Secondo la definizione data dell'algoritmo (in matematica) la risposta è "No"

Penso che in una definizione generale, l'algoritmo sia solo una ricetta (insieme di istruzioni). A volte, confondiamo l'algoritmo con la sua esecuzione . L'esecuzione dell'algoritmo dipende dal suo esecutore. Quindi la validità o la fattibilità (computabilità nel termine della matematica) di un algoritmo dipende dall'esecutore.

Una ricetta di cucina è anche un algoritmo, ma non ti aspetti di darlo a un computer e aspetta che il tuo pasto sia pronto.

Ma il computer può capire ed eseguire l'istruzione read() , quindi è un'istruzione valida per esso, e da questa prospettiva la risposta è "Sì" . Non dovremmo confondere questa istruzione con la sua esecuzione. la questione che l'utente inserirà o meno i dati non è importante, ora ogni cosa è solo sulla carta (ricetta).

Ma quell'istruzione read() viene solitamente usata per un computer non per un algoritmo di calcolo (gli algoritmi che di solito conosciamo e che dovrebbero essere eseguiti da Turing Machine). Gli algoritmi di calcolo riguardano il calcolo delle funzioni o l'elaborazione e la trasformazione dei dati, quindi read() non è un operatore matematico o non è importante per questo.

Tuttavia , l'algoritmo di esempio potrebbe essere un calcolo che non può essere scritto come un algoritmo di calcolo (un calcolo chiuso), il read() si verifica qui durante il calcolo . è un tipo di calcolo interattivo

In computer science, interactive computation is a mathematical model for computation that involves input/output communication with the external world during computation.

    
risposta data 12.02.2015 - 15:15
fonte

Leggi altre domande sui tag