Credi nella magia?
E se ti dicessi che esiste un insieme di incantesimi capaci di fare molte cose velocemente e tutte in una volta sola.
Incantesimi che hanno reso oggetti inanimati più intelligenti e potenti degli esseri umani, ci hanno portato nello spazio e reso il mondo intero disponibile tra le nostre mani con un solo clic.
Questi incantesimi si chiamano algoritmi.
Un algoritmo è un insieme di passaggi matematici, logici e sequenziali necessari per risolvere un problema.
In arabo, Al-Khwarizmia fu chiamato così in onore dello studioso Abu Jaafar Mohammed bin Musa Al-Khwarizmi, che lo inventò nel nono secolo d.C. Il termine comune in latino e nelle lingue europee è "algoritmo" e inizialmente il suo significato era limitato a un algoritmo con soli tre tipi di combinazioni:
Sequenza, ovvero l'ordine in cui le istruzioni si verificano e vengono processate.
Selezione, che determina quale percorso seguire per risolvere il problema in base a determinati criteri.
Iterazione, ovvero il ripetere un insieme di operazioni un numero specifico di volte o fino al verificarsi di una certa condizione.
Dalla raccomandazione di film alla selezione delle notizie, fino alla ricerca dei nostri compagni di vita, gli algoritmi sono ovunque intorno a noi.
Nel 2012, il matematico americano Lloyd Shapley ha ricevuto il Premio Nobel per l'Economia per aver trovato un algoritmo per risolvere il problema noto come "stable matching problem" (SMP).
In matematica, economia e informatica, l'algoritmo Gale-Shapley (noto anche come algoritmo di accettazione differita o algoritmo di proposta e rifiuto) è un algoritmo per trovare una soluzione al problema del "stable matching", nominato così in onore di David Gale e Lloyd Shapley, che lo hanno descritto come risolutore sia del problema dell'ammissione universitaria che del problema del matrimonio stabile. Richiede tempo polinomiale, e il tempo è lineare rispetto alla dimensione dell'input dell'algoritmo. È un meccanismo veritiero dal punto di vista dei partecipanti che presentano proposte, per i quali la soluzione sarà sempre ottimale.
Come scrivere un Algoritmo
Per scrivere un algoritmo, devi seguire determinati passaggi. Non è nemmeno necessario comprenderli. Ma devono essere seguiti rigorosamente.
Definizione del Problema
Definire il problema è il primo passo per risolverlo. Gli input e gli output sono definiti in modo preciso e chiaro sotto forma di variabili. Come programmatore, devi definire i concetti del problema sotto forma di variabili con un nome specifico e un tipo di dati specifico, dove questi dati vengono richiamati nell'algoritmo. Attraverso il nome e il tipo di dati si determinano le operazioni che possono essere eseguite sui dati. Ci sono molti tipi di dati, ma puoi classificarli in due tipi principali: dati numerici e dati di testo.
In questa fase, viene di solito creata una tabella con i dati, in modo che questa tabella contenga due classificazioni principali: Variabili di Input, Variabili di Output.
Scrittura di un Algoritmo
In questa fase, il programmatore deve pensare a come risolvere il problema e quindi suddividere questo metodo in un gruppo di passaggi, in modo che ogni passo esegua una sola operazione e l'ordine di questi passaggi debba essere attentamente considerato, poiché il computer esegue questi passaggi uno dopo l'altro nell'ordine in cui lo fa il programmatore, e il programmatore può definire nuove variabili per aiutare a risolvere il problema, in tal caso queste variabili vengono chiamate Variabili di Programma e queste variabili non sono né input né output.
Prima di iniziare a scrivere l'algoritmo, devi sapere che ci sono due modi per scriverlo:
Pseudo Codice
In questo metodo, il programmatore scrive i passaggi per risolvere il problema (l'algoritmo) in una sequenza numerata o non numerata e scrive ogni passo su una riga separata. Il programmatore può usare la sua lingua, che sia l'inglese, l'arabo, il cinese... ecc., per scrivere la sequenza di passaggi.
Una delle caratteristiche più importanti di questo metodo è la flessibilità, poiché il programmatore può scrivere le sue idee sotto forma di passaggi nel linguaggio di base che utilizza nella sua vita quotidiana. Gli algoritmi ben scritti in questo modo sono di solito facili da convertire in codici o comandi informatici.
Ma il principale svantaggio di questo metodo è che con la dimensione grande dell'algoritmo diventa difficile tenere traccia e rivedere i suoi passaggi.
Flusso di Programma
In questo metodo, il programmatore scrive i passaggi per risolvere l'algoritmo utilizzando un insieme di forme geometriche di base in modo che ogni forma rappresenti un passaggio per risolvere il problema, e c'è uno standard prevalente e seguito per l'uso di queste forme.
Uno dei vantaggi di utilizzare questo metodo è che è diretto e semplice, in quanto è facile seguire i passaggi dell'algoritmo, e anche l'algoritmo scritto in questo modo può essere compreso da qualsiasi programmatore, indipendentemente dalla lingua che parla.
Uno dei più importanti svantaggi di questo metodo è che è difficile convertirlo in codici se si utilizzano linguaggi di programmazione come il linguaggio C. È difficile scrivere algoritmi complessi in questo modo.
Tracciamento dell'Algoritmo
In questa fase, testiamo l'algoritmo che abbiamo scritto, inserendo dati noti in anticipo, passo dopo passo, per valutare la validità e l'efficienza dell'algoritmo.
Scrittura del Codice
Qui, devi prima imparare un linguaggio di programmazione per poter convertire l'algoritmo che hai progettato in un programma, come il linguaggio di programmazione JavaScript con il linguaggio di markup HTML.
Conclusione
L'obiettivo principale di apprendere gli algoritmi è cambiare il nostro modo di guardare le cose, in modo che gli algoritmi non differiscano molto dagli incantesimi magici, in quanto con determinati passaggi risolvono molti problemi che gli esseri umani non sono in grado di risolvere.
Ma ovviamente ci sono alcuni problemi irrisolvibili. Nel 1936, il matematico britannico Alan Turing (il padrino dei computer moderni) dimostrò che non esiste un algoritmo in grado di risolvere il problema dell'arresto.
Il problema dell'arresto consiste nel determinare, da una descrizione di un programma per computer arbitrario e da un input, se il programma terminerà l'esecuzione o continuerà a eseguirsi all'infinito.
Inoltre, non possiamo risolvere tutti i problemi che hanno una soluzione.
Ad esempio, nel 1962 la società Procter & Gamble ha offerto un premio di 10.000 dollari (circa 80.000 dollari in denaro odierno) a chiunque avesse risolto il seguente problema euclideo:
Il concorso chiedeva il percorso più breve attraverso 33 città negli Stati Uniti, con la condizione di visitare ogni città una sola volta.
Anche se il problema sembra semplice, ha un numero enorme di possibilità.
La prima città che visiti sarà una delle 33 possibilità, come seconda città abbiamo 32 possibilità, come terza abbiamo 31 possibilità e così via. Ciò ci lascia con approssimativamente 1037 possibilità. Se trasformiamo questo problema in un algoritmo e lo eseguiamo sui computer più veloci del nostro tempo, ci vorrebbero 300 miliardi di anni per trovare la soluzione. Questo significa 20 volte l'età dell'universo.
Questo problema è noto come Problema del Commesso Viaggiatore (TPS) ed è appartenente alla classe dei problemi di ottimizzazione combinatoria noti come NP-completi (Nondeterministici polinomiali).
Fonti
WIKIPEDIA
IL FUTURO SONO GLI ALGORITMI, NON IL CODICE
ALGORITMO - WHATIS.TECHTARGET.COM
TUTTO SUGLI ALGORITMI