Algoritmo: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica Etichette: Annullato Modifica da mobile Modifica da web per mobile |
m Annullate le modifiche di 2402:3A80:19FD:CA46:0:0:0:2 (discussione), riportata alla versione precedente di InternetArchiveBot Etichetta: Rollback |
||
Riga 1:
{{Nota disambigua}}
In [[matematica]] e [[informatica]] un '''algoritmo''' è la specificazione di una sequenza finita di operazioni (dette anche ''istruzioni'') che consente di risolvere tutti i quesiti di una stessa classe o di calcolare il risultato di un'espressione matematica. Un algoritmo deve essere
Riga 23 ⟶ 13:
L'algoritmo è un concetto fondamentale dell'[[informatica]], anzitutto perché è alla base della nozione teorica di [[Teoria della calcolabilità|calcolabilità]]: un problema è calcolabile quando è risolvibile mediante un algoritmo. Inoltre, l'algoritmo è un concetto cardine anche nella fase di [[Programmazione (informatica)|programmazione]] dello [[ciclo di vita del software|sviluppo di un software]]: preso un problema da [[automatica|automatizzare]], la programmazione costituisce essenzialmente la traduzione o [[codifica]] di un algoritmo per tale problema in [[programma (informatica)|programma]], scritto in un certo [[linguaggio]], che può essere quindi effettivamente [[esecuzione (informatica)|eseguito]] da un [[calcolatore]] rappresentandone la logica di [[Elaborazione dati|elaborazione]].
== Definizione ==
Nel [[XX secolo]], il concetto di algoritmo venne formalizzato per risolvere il problema matematico della "decisione" (''[[Entscheidungsproblem]]''), posto da [[David Hilbert]] nel 1928, e altre successive formalizzazioni giunsero con lo sviluppo dei concetti di "[[effective calculability|calcolabilità effettiva]]"<ref>Kleene 1943 in Davis 1965:274</ref> e di "metodo effettivo"<ref>Rosser 1939 in Davis 1965:225</ref>. Le formalizzazioni matematiche più famose sono le [[funzioni ricorsive]] di [[Kurt Gödel|Gödel]]–[[Jacques Herbrand|Herbrand]]–[[Stephen Cole Kleene|Kleene]] del 1930, 1934 e 1935; il [[lambda calcolo]] di [[Alonzo Church]] e la [[Formulation 1]] di [[Emil Leon Post]] del 1936; e, infine, la [[macchina di Turing]] del 1936–37 e 1939. Nonostante ciò, una definizione del concetto di algoritmo che sia formale e non tecnica manca tuttora<ref>
{{Cita libro
Riga 72 ⟶ 62:
Inizialmente un algoritmo può essere descritto attraverso l'uso di un [[diagramma di flusso]] o ricorrendo a uno [[pseudocodice]]. Successivamente, nella fase di [[Programmazione (informatica)|programmazione]] l'algoritmo così scritto verrà tradotto in [[linguaggio di programmazione]] a opera di un [[programmatore]] sotto forma di [[codice sorgente]] dando vita al [[programma (informatica)|programma]] che sarà [[esecuzione (informatica)|eseguito]] dal calcolatore, eventualmente dopo un'ulteriore traduzione in [[linguaggio macchina]]. Particolare rilevanza teorica in tale ambito assume il [[teorema di Böhm-Jacopini]] che afferma che qualunque algoritmo può essere implementato utilizzando tre sole strutture, la [[sequenza (informatica)|sequenza]], la [[selezione (informatica)|selezione]] e il ciclo ([[iterazione]]), da applicare ricorsivamente alla composizione di [[istruzione (informatica)|istruzioni]] elementari. Nella pratica corrente il programmatore professionista nel suo lavoro svolge automaticamente questo processo di traduzione scrivendo direttamente il codice sorgente necessario nelle suddette modalità avendo già trovato la soluzione al problema dato.
== Approccio matematico ==
Esistono numerosi modelli matematici di algoritmo. In generale, un algoritmo riceve un insieme di valori (dati) in [[input]] e ne genera uno in output (chiamato soluzione). Dato dunque un algoritmo A si denota con f<sub>A</sub> la funzione che associa a ogni ingresso x di A la corrispondente uscita.
Riga 92 ⟶ 76:
dove <math>D \pi</math> sono le istanze del problema e <math> S \pi </math> sono le soluzioni e <math>\forall x \in D \pi:f \pi (x) </math> sia una soluzione al problema per l'istanza x.
=== Studio della complessità computazionale di un algoritmo ===
{{vedi anche|Teoria della complessità computazionale}}
Riga 196 ⟶ 164:
* l'algoritmo di Gauss non richiede altro spazio oltre a quello necessario per memorizzare la matrice dei coefficienti e il vettore dei termini noti. Al termine dell'algoritmo il vettore dei termini noti conterrà la soluzione. Pertanto la sua complessità spaziale è anch'essa minima: <math>O(n^2)</math>.
== Strutture di dati ==
{{vedi anche|Struttura dati}}
Riga 261 ⟶ 217:
Molte categorie di algoritmi sono strettamente legate all'organizzazione dei dati in memoria ([[struttura dati|strutture dati]]).
=== Altri algoritmi ===
{{div col|cols=3}}
* [[informatica quantistica|Algoritmi quantistici]]
|