Algoritmi e calcolabilità - Lezione in semi-presenza

Lezione in semi-presenza

2. Parametri e Variabili

Diapositiva Diapositiva

Una caratteristica importante di un algoritmo è che deve essere la soluzione “standardizzata” di una classe di problemi, ovvero uno stessa sequenza finita di passi che risolvono problemi che differiscono soltanto per i dati iniziali (parametri).

Pensiamo ad esempio al problema precedente in Figura 1. Una persona che si confronta con quel problema ha già una procedura in mente e il problema, in genere, viene presentato ai piccoli ed ignari studenti delle elementari come facente parte di una classe di problemi. Lo scolaro deve individuare la classe ed applicare la soluzione standard. Nel caso particolare, la classe di problemi è quella che prevede che qualcuno “ricavi” una somma e ne “spenda” un'altra. La domanda risulta sempre essere quindi la somma rimasta o qualcosa di similare.

Nel caso del determinato problema precedente (Figura PROBLEMACONTADINO), la procedura risolutiva proposta (Figura SOLUZIONEPROBLEMACONTADINO) è invece applicabile solo al particolare problema. Questa procedura risolutiva non può pertanto essere applicata ad altri problemi se non a quello esattamente proposto. Senza arrivare al caso generale in cui è possibile fornire la procedura risolutiva o l’algoritmo per la soluzione della classe dei problemi che prevedono una vendita, un acquisto e il calcolo della somma rimasta, è possibile generalizzare la procedura risolutiva precedente utilizzando il concetto di parametro o variabile. In questo modo, l’algoritmo diventa una procedura risolutiva applicabile ad una classe di problemi e non solo ad un problema specifico dato. Una soluzione più generica al problema precedente è data in Figura SEMPLICEPROBLEMAGENERALIZZATO dove viene generalizzato il problema e la soluzione introducendo le variabili o i parametri. Si osservi anche che la soluzione generalizzata proposta è comunque una procedura risolutiva o un algoritmo in quanto la formula Somma= X*Y-Z*K prevede che vengano fatte prima le moltiplicazioni e poi la sottrazione. Questo non è scritto esplicitamente nella formula ma è un fatto che deriva dalla conoscenza della precedenza degli operatori ovvero che la moltiplicazione deve essere fatta prima delle operazioni di somma e sottrazione. L’ordine di precedenza degli operatori ci pare una cosa naturale ma non lo è. Qualcuno ha deciso la convenzione e ce la fa trasmettere attraverso le nozioni che nel corso della nostra vita ci vengono fornite.

Problema Generalizzato

Un contadino ha venduto Kg X di uva a Y € al chilogrammo e con il ricavo ha acquistato Z metri di stoffa pagandola K € al metro.

Quale Somma gli è rimasta?

Procedura Generalizzata

Somma= X*Y-Z*K

Figura SEMPLICEPROBLEMAGENERALIZZATO Semplice problema generalizzato e relativa soluzione

Comunque, la generalizzazione del problema e della procedura risolutiva rende la soluzione applicabile per tutti i problemi che sono formulati con le stesse parole di quelle del problema generalizzato in Figura SEMPLICEPROBLEMAGENERALIZZATO e dove al posto delle X, Y, Z e K si trovano dei numeri. In un certo senso, il problema generalizzato è una maschera con dei buchi. Se la maschera può essere sovrapposta al problema attuale, allora il problema è risolubile con la procedura generalizzata espressa.
Con la parametrizzazione di un problema trovo quindi una soluzione che risolve piu’ problemi fra loro simili, che differiscono soltanto per le informazioni iniziali (parametri).

Ma in realtà si può osservare che una soluzione (algoritmo), può essere valida per differenti problemi.

Se si riesce a trovare l’algoritmo che può risolvere più di un problema, si può fornire tale “ricetta” a qualcun altro, a chi ne ha bisogno.

Facendo riferimento sempre al problema dell’uva e della stoffa, non è importante la figura del contadino, non è importante neppure l’uva, come è indifferente l’azione di comprare stoffa. La cosa importante è l’esistenza di una persona che vende e acquista.

La sequenza "naturale" delle operazioni e degli operatori, è una cosa che qualcuno ha deciso, una convenzione. Perciò si seguono anche procedure in modo standardizzato. Queste procedure che ci sono state insegnate, hanno passaggi ben precisi.

L’algoritmo prevede di svolgere le operazioni secondo la precedenza degli operatori. L’unico modo per violare la precedenza degli operatori è mettere le parentesi. Queste operazioni le svolgiamo anche in un determinato modo, ovvero da sinistra verso destra poiché è il nostro modo di scrivere.

Come si fa a prendere come standard questa soluzione (algoritmo)?

Cambiando i numeri con delle variabili. Ad ogni variabile è assegnato un determinato valore.

Una variabile è il nome di uno spazio mentale o di uno spazio qualsiasi. In questo spazio vi si può porre un valore. La variabile è il nome dello spazio (ad x posso far assumere il valore di 4 ma anche di 5, ecco perché si tratta di uno spazio mentale). È lo spazio che varia il valore, non la variabile.

La variabile è formata da: un nome e uno spazio ad esso associato. Lo spazio deve assumere un valore. Se ponessimo lo stesso nome in due parti diverse, ci riferiremmo allo stesso spazio di memoria che abbiamo in testa. Non si tratterebbe di spazi differenti anche se nella scrittura risultano due spazi differenti.

Le variabili d’ingresso prendono il nome di parametri. Si è compreso che vi è un altro elemento che si può variare, ovvero il dato iniziale.

Variabili dingresso = parametri = dati iniziali = valori iniziali della variabile.

Possiamo variare se mettiamo i valori appositi negli spazi appositi. Così facendo si è aumentata la quantità di problemi che riusciamo a risolvere con una sola soluzione.

A questo punto, riusciremo a risolvere tutti i problemi che rientrano in quel caso generale. Problemi che, in un certo senso, risultano infiniti perché i numeri possono variare infinitamente. Quest’infinitezza non ci aiuta nel dire che si possono risolvere tutti i problemi di quel caso generale. Inoltre, questo meccanismo, si può generalizzare ulteriormente, così che si potranno risolvere ulteriori problemi. Si arriva quindi all'unificazione: prendo una variabile e "ci metto lo schema" (ovvero la sequenza finita di istruzioni) che mi serve per risolvere il problema.

Ciò che deve restare invariata è l’unità di misura (metri, euro…).

L’operazione di unificazione consiste nel prendere una variabile, mettere lo schema sul problema reale, e si ottiene che 125 (kg d’uva venduta) è unificato ad x. Finisce nello spazietto di memoria occupato da x.