Valutazione attuale: 0 / 5

Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

Share

Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn

Gli Algoritmi

Cominciamo con una definizione formale tratta dal sito della Treccani (per approfondire vai al sito http://www.treccani.it/vocabolario/algoritmo/):

algoritmo (ant. algorismo) s. m. [dal lat. mediev. algorithmus o algorismus, dal nome d’origine, al-Khuwārizmī, del matematico arabo Muḥammad ibn Mūsa del 9° sec. (così chiamato perché nativo di Khwarizm, regione dell’Asia Centrale)]. – 1. Termine che indicò nel medioevo i procedimenti di calcolo numerico fondati sopra l’uso delle cifre arabiche. Nell’uso odierno, anche con riferimento all’uso dei calcolatori, qualunque schema o procedimento matematico di calcolo; più precisamente, un procedimento di calcolo esplicito e descrivibile con un numero finito di regole che conduce al risultato dopo un numero finito di operazioni, cioè di applicazioni delle regole. In partic., a. euclideo, metodo per determinare il massimo comune divisore di due numeri interi a e b, basato su divisioni successive. 2. In informatica, insieme di istruzioni che deve essere applicato per eseguire un’elaborazione o risolvere un problema.

Ho scritto, nel precedente articolo/lezione Dal Problema alla APP - Lezione 1 - Il Problema, che quella dell'ALGORITMO è l'ultima fase che ci permette di descrivere in forma grafica e testuale cosa l'ESECUTORE deve fare per ottenere la soluzione al problema affrontato.

La costruzione dell'Algoritmo, quale descrittore di una soluzione di un problema destinato ad un esecutore, può generare problemi di "compatibilità".

E' importante declinare le caratteristiche base che deve avere un algoritmo per essere considerato tale.

  • Generalità - un algoritmo deve servire a risolvere una stessa classe di problemi (ad esempio calcorare la somma di due numeri qualunque essi siano e non solo la somma di 3+5).
  • Atomicità - ogni singolo passo deve essere di tipo elementare, cioè non scomponibile in altri sottopassi.
  • Non ambiguità - i passi devono essere interpretati in modo diretto e univoco dall'esecutore.
  • Finitezza - l'algoritmo deve essere composto da un numero finito di passi (con un inizio ed una fine) e richiedere una quantità finita di dati
  • Terminazione - l'esecuzione deve avere termine passato un certo tempo (finito);
  • Effettività - l'esecuzione deve portare a un risultato univoco (non è possibile avere risultati diversi con stessi dati d'ingresso).

Ma andiamo per ordine e riprendiamo il filo del discorso per arrivare dal problema all'Algoritmo.

Una volta identificato il problema (problem finding) e delineata una possibile struttura/modello di soluzione (problem shaping) si passa al problem solving in cui occore essere più dettagliati e precisi circa la strategia scelta per la soluzione.

In questa fase è fondamentale l'identificazione dei dati e in questo può essere d'aiuto un foglio elettronico (ma anche di carta) in cui raccogliere nomi, tipi, funzioni che devono svolgere i dati.


  - -


Esistono dati di tipo costante o variabile, dati di INPUT iniziale e dati di INPUT calcolato (cioè che vengono creati durante l'esecuzione del programma e vengono usati per fare altri calcoli), dati di OUTPUT (tipicamente i risultati parziali o finali da mostrare a video).

In base poi alla loro tipologia, ecco alcuni tipi base quali  dati numerici (generalmente appartenenti all'insieme dei REALI o a quello degli INTERI), i dati testuali (il tipo CHAR, carattere, o il tipo STRING), i dati BOOLEANI (che ammettono solo di essere VERI o FALSI). Ne esistono altri i cui nomi possono variare in base al tipo di linguaggio di programmazione che si decide di usare in fase di codifica finale. - Potete vedere, ad esempio, una comparazione tra tipi di dati usati dal linguaggio c# (si legge C Sharp) e il linguaggio Java sul sito per sviluppatori di Microsoft.

 

Una volta definiti i dati da usare (significa, in pratica, che si prendono tanti pezzettini della memoria del computer dentro i quali andare a conservare i dati veri e propri che l'utente fornirà o che verranno calcolati), si passa alla descrizione dei singoli passaggi che devono essere eseguiti per arivare al risultato.

E' importante che ogni passo da eseguire sia di tipo elementare (ATOMICITA' dell'algoritmo) in modo da velocizzare i calcoli, ottimizzare le risorse e, sicuramente poter intervenire facilmente in fase di correzione degli errori.

Due sono gli approcci normalmente usati. Nel primo, c.d. approccio TOP-DOWN si scompone il problema partendo dal complesso generale sino ad arrivare all'elemento più piccolo, nel secondo, approccio BOTTOM-UP, si fa esattamente il contrario. (approfondisci queste due metodologie su Wikipedia - Progettazione top-down e bottom-up limitandoti alla parte della Informatica).

Richiamata l'attenzione su dati e atomicità, si puo stilare un primo abbozzo di algoritmo per poi proseguire man mano alla sua definizione totale.

Per fare questo, ancora una doppia possibilità: DIAGRAMMI DI FLUSSO, per una descrizione grafica il cui vantaggio è l'immediatezza del "movimento" del flusso di esecuzione del programma, oppure PSEUDOCODICE che di contro permette una prima parziale codifica usando sintassi, grammatiche e costrutti molto simili ai linguaggi che si desidera usare.

Continua con... Dal Problema alla APP - Lezione 2 - Gli Algoritmi - Parte seconda