Algoritmi Flashcards
Algoritmo
Un algoritmo è un procedimento effettivo che consente di risolvere un problema eseguendo, in un determinato ordine, una sequenza finita e completa di operazioni elementari (passi semplici, azioni, istruzioni), scelte tra un insieme (solitamente finito) di possibili azioni. Le operazioni in cui viene scomposto il processo risolutivo del problema devono essere comprensibili ed eseguibili dall’entità (uomo, computer, robot, . . .) cui l’algoritmo ` e destinato, entità che può anche non essere il computer.
Algoritmo: input e output
Spesso un algoritmo ha degli input e degli output. L’input è l’insieme degli elementi in ingresso, mentre l’output è l’insieme degli elementi in uscita. Ad esempio, in una ricetta di cucina gli input sono gli ingredienti della ricetta e l’output il piatto finale realizzato.
Proprietà di un algoritmo
- finito
- non ambiguo
- generale
- effettivo
- efficienza
Un procedimento che viola una di queste proprietà non è ritenuto un algoritmo valido per il problema da risolvere.
Algoritmo: finito
Finito: L’algoritmo
- deve essere composto da un numero finito (anche elevato) di azioni (passi semplici, istruzioni);
- richiedere una quantità finita di dati in input;
- l’esecuzione deve aver termine dopo un tempo finito.
Algoritmo: non ambiguo
- Non ambiguo: Ogni azione (passo semplice, istruzione) deve essere interpretata in modo univoco dall’esecutore (computer, robot, . . .). Le operazioni che compongono un algoritmo possono essere anche complesse, purché sia stato previsto ogni aspetto che il problema può assumere durante la fa-se risolutiva e che ogni espressione sia interpretabile in maniera univoca senza ambiguità.
Algoritmo: generale
Generale: L’algoritmo deve essere il più generale possibile in modo da applicarlo a tutta la classe di problemi simili. Inoltre, deve poter gesti-re correttamente qualsiasi insieme di dati di input per quel particolare problema.
Algoritmo: effettivo
Effettivo: L’algoritmo deve avere un punto di partenza ed ogni operazione deve produrre un ben determinato risultato ogni volta che si presentano le stesse condizioni. Ovviamente un procedimento che sbaglia ` e inutile in quanto non calcola effettivamente la funzione per cui ` e stato ideato.
Algoritmo: efficienza
Una ulteriore importante proprietà, ma non obbligatoria, ` e l’efficienza: l’algoritmo deve pervenire alla soluzione del problema usando la minor quantità possibile di risorse di calcolo (tempo di esecuzione, spazio in memoria, . . .).
L’efficienza di un algoritmo richiede di verificare
- se ` e corretto, ossia produce il risultato atteso;
- se ` e veloce (in termini di tempo impiegato per produrre il risultato);
- se ` e parsimonioso (in termini di risorse allocate per produrre il risultato).
Progettazione algoritmo
Nel progettare un algoritmo è necessario analizzare il problema e decidere le azioni da compiere e la loro sequenza temporale. Le fasi della progettazione di un algoritmo possono essere così schematizzate:
- analisi del problema;
- definizione dei dati di ingresso;
- definizione dei risultati che si desiderano ottenere;
- individuazione dei possibili metodi risolutivi;
- determinazione della necessità e della disponibilità di risorse (di calcolo e di memorizzazione);
- generalizzazione del problema (definizione di una classe di problemi simili da risolvere);
- descrizione informale dell’algoritmo (o degli algoritmi) necessari a risolvere la procedura.
Implementazione algoritmo
Una volta delineato un algoritmo, il passaggio successivo è l’implementazione, ovvero la traduzione in un programma. Un programma è un algoritmo scritto in un linguaggio comprensibile dal computer che consenta di svolgere un prefissato compito. La programmazione deve tenere in considerazione alcuni criteri di ottimizzazione, quali i tempi di calcolo e l’occupazione di memoria, e si concretizza nei seguenti passi:
- definizione dell’algoritmo, spesso in forma grafica tramite un diagramma a blocchi (diagramma di flusso, flow chart) oppure in pseudocodice (linguaggio di programmazione testuale, affine alla lingua parlata);
- stesura del programma nel linguaggio di programmazione prescelto (C, Java, R, Python, . . .);
- esecuzione del programma nel linguaggio di programmazione prescelto.
Variabili
Ogni linguaggio di programmazione prevede l’uso di variabili, che possono considerarsi come contenitori di dati. Esse vengono usate nei programmi, per memorizzare i valori, che possono essere relativi ai dati in ingresso, ai risultati finali o a risultati intermedi dell’elaborazione. Una variabile deve avere: - un nome univoco; - un tipo che indica il genere di informazione che contiene; - un valore tra quelli possibili per il tipo, che pu` o ovviamente essere modificato nel corso delle elaborazioni; - una dimensione, in termini di celle di memoria occupate.
Nome della variabile
Il nome di una variabile viene scelto dal programmatore e si utilizza il nome identificatore. Il nome dovrebbe essere significativo nel senso che dovrebbe riflettere il ruolo che la variabile assume all’interno del programma. Comunque, la scelta di un particolare nome non ha influenza sull’esecuzione del programma. Occorre osservare che le parole riservate non possono essere usate per i nomi delle variabili (ad esempio, TRUE o FALSE).
Tipo di variabile
Il tipo determina i valori che la variabile pu` o assumere e determina lo spazio in memoria necessario: - numeri booleani {0,1}; - numeri interi (rappresentati tramite il complemento a due); - numeri reali (rappresentati in virgola fissa o in virgola mobile); - caratteri (rappresentati in ASCII o UNICODE) . Le variabili che servono a contenere informazioni testuali, sono dette di tipo stringa. Per memorizzare un testo occorre assegnarlo ad una variabile di tipo stringa ed inoltre delimitarlo con doppi apici (che non vengono memorizzati, ma servono a delimitare il testo da memorizzare).
Variabile globale e locale
Una variabile globale può essere vista e utilizzata da ogni funzione del programma e in ogni istruzione del programma. Una variabile ` e detta locale quando ` e definita all’interno di una funzione o come parte di un ciclo, essa ` e visibile e può essere utilizzato solo all’interno della funzione in cui ` e stata dichiara
Dichiarazione e inizializzazione della variabile
Tutte le variabili, prima di essere utilizzate, devono essere dichiarate, ossia deve essere stabilito il tipo della variabile ed il suo nome. La posizione in cui viene dichiarata la variabile determina la sua visibilità all’interno del pro-gramma e la capacità, da parte di alcune parti del programma, di utilizzarla. La variabile deve essere anche inizializzata, ossia le deve essere assegnato un valore, operazione che generalmente viene fatta contemporaneamente alla dichiarazione. Una variabile, dopo essere stata inizializzata, pu` o cambiare il suo valore nell’esecuzione del programma.