Concetti Chiave
- La risoluzione di un problema richiede l'analisi dei dati iniziali (input) e l'identificazione del risultato desiderato (output).
- Un algoritmo è una procedura composta da istruzioni finite, precise, eseguibili e generali per risolvere una classe di problemi.
- Gli esecutori di algoritmi possono essere intelligenti, applicando conoscenze acquisite, o automatici, eseguendo meccanicamente i passi.
- L'efficacia e l'efficienza di un algoritmo sono critiche, influenzando la correttezza della soluzione e l'uso delle risorse.
- Secondo il teorema di Jacopini-Bohm, ogni algoritmo può essere rappresentato tramite strutture di sequenza, selezione e iterazione.
Dal problema all'algoritmo
Problema: situazione da risolvere per ottenere un certo risultato.
Cosa prevede la risoluzione di un problema?
-
a) comprensione dati iniziali a disposizione (Input);
b) ciò’ che si vuole ottenere (Output).
Analisi ---> Procedura ---> Risultato
La procedura da seguire per risolvere il dato problema è in informatica universalmente nota con il termine algoritmo.
Algoritmo: è un insieme di regole (istruzioni) aventi le seguenti caratteristiche:
-
1. finitezza: un A. è composto da un numero finito di istruzioni (passi elementari);
2. determinatezza: deve essere definito e preciso (le istruzioni non devono essere ambigue);
3. terminazione: dopo l’esecuzione di un numero finito di passi, l’algoritmo deve terminare;
4. effettività: l’azione specificata in ogni passo dell’algoritmo deve essere effettivamente eseguibile dall’esecutore (*) preposto per l’esecuzione dell’algoritmo stesso; non avrebbe senso infatti prevedere in un algoritmo azioni che l’esecutore designato non è in grado di compiere;
5. generalità: un algoritmo dovrebbe essere progettato per risolvere non tanto uno specifico problema, quanto una classe di problemi simili.
*esecutore: “chi” è preposto all’esecuzione dei singoli passi specificati in un algoritmo.
In genere si usa classificare gli esecutori in esecutori intelligenti, che risolvono i problemi applicando le conoscenze acquisite nel corso della propria attività, ed esecutori automatici, che risolvono in problemi eseguendo meccanicamente i passi di un algoritmo senza acquisire nuove conoscenze.In generale si può dire che non esiste un algoritmo univoco per risolvere un determinato problema.
Nel mondo della programmazione individuare un algoritmo adatto a risolvere un dato problema non è, in generale, cosa semplice. La questione non riguarda solo l’efficacia, cioè il fatto che l’ A. risolva il problema in esame. Un altro elemento critico è l’efficienza, ovvero quanto costa, in termini di risorse, l’esecuzione del nostro algoritmo (es, eccessiva occupazione della memoria).
Rappresentazione grafica degli algoritmi: flow – chart
Teorema di Jacopini –Bohm (1966):
“Un qualsiasi algoritmo può essere espresso usando esclusivamente le strutture di sequenza, di selezione e di iterazione”.
-
1. Sequenza: una o più azioni elementari sono eseguite una di seguito all'altra nell'ordine in cui sono scritte.
2. Selezione: l’esecutore sceglie tra l’eseguire una o più operazioni in alternativa ad altre in funzione del verificarsi o meno di una certa condizione logica, selezionando il “percorso” da seguire in dipendenza da quanto eseguito in precedenza nell'avanzamento del procedimento di soluzione.
3. Ripetizione o iterazione: l’esecutore ripete più volte una o più operazioni in funzione del verificarsi o meno di una condizione logica che controlla il numero di volte per cui tali istruzioni devono essere ripetute (ciclo).
-
• ciclo determinato: in questo caso si conosce precisamente il momento in cui la ripetizione avrà termine, ossia si conosce a priori il numero delle volte che il ciclo verrà ripetuto;
• ciclo indeterminato: il numero dei cicli ripetuti dipende dal verificarsi o meno della condizione che ne controlla l’arresto. La condizione può essere espressa in testa o in coda al ciclo: nel primo caso il ciclo potrebbe anche non essere mai eseguito (se la condizione è inizialmente falsa), mentre nel secondo caso il ciclo sarà eseguito almeno una volta.
Domande da interrogazione
- Quali sono le caratteristiche fondamentali di un algoritmo?
- Cosa implica la comprensione dei dati iniziali e dell'output desiderato nella risoluzione di un problema?
- Qual è il ruolo dell'esecutore in un algoritmo?
- Quali sono le strutture fondamentali per esprimere un algoritmo secondo il teorema di Jacopini-Bohm?
- Qual è la differenza tra un ciclo determinato e un ciclo indeterminato?
Un algoritmo deve avere finitezza, determinatezza, terminazione, effettività e generalità.
Implica l'analisi dei dati per individuare i passi necessari (procedura) per ottenere il risultato atteso.
L'esecutore è colui che esegue i passi specificati nell'algoritmo, che può essere intelligente o automatico.
Sequenza, selezione e iterazione.
Un ciclo determinato ha un numero di ripetizioni noto a priori, mentre un ciclo indeterminato dipende da una condizione che ne controlla l'arresto.