Progetto di unità didattica: Algoritmi di ricerca ed alberi binari Indice

PAS 2014 – classe A042 (Informatica)
Università degli studi di Pisa
Progetto di unità didattica: Algoritmi di ricerca ed alberi binari
Per gli esami di :
Algoritmica e problem solving per l’insegnamento (APS)
Linguaggi di programmazione per l’insegnamento (LP)
Laboratorio didattico-pedagogico integrato per l'insegnamento dell'informatica 1 (Lab1)
Candidato:
R. Gallerini
Sommario:
Si propone un percorso didattico, destinato ad una classe 5 a Liceo Scientifico opzione Scienze Applicate,
riguardante gli algoritmi di ricerca.
La parte teorica del percorso riguarderà dapprima l'algoritmo di ricerca binaria su array ordinati,
confrontando i tempi di calcolo della ricerca binaria (logaritmici) con quelli della ricerca sequenziale
(lineari), fornendo così un esempio concreto del concetto di complessità computazionale.
La trattazione teorica sarà supportata da un'applicazione Javascript che fornisce un semplice ambiente di
visualizzazione grafica del processo di ricerca su di un array di cognomi; l'ambiente consente di rendere
graficamente evidente il confronto tra gli algoritmi.
Si vedrà poi un'applicazione numerica in C, basata sullo stesso principio della ricerca binaria: il calcolo di
uno zero di una funzione con il metodo di bisezione. Il concetto di complessità logaritmica sarà qui visto in
un contesto di calcolo numerico: il metodo di bisezione fornisce infatti un'accuratezza (in termini di cifre
decimali) proporzionale al numero di passi svolti.
Successivamente verrà introdotto il concetto di albero binario e di albero binario di ricerca; questo consentirà
di fornire esempi significativi di algoritmi ricorsivi. Per concretizzare e consolidare i concetti, verrà vista
un'applicazione in C che implementa gli algoritmi per la gestione di un BST di stringhe: costruzione, stampa,
cancellazione, ricerca. Questo richiederà l'introduzione del concetto di allocazione dinamica della memoria,
nel contesto a basso livello del C (funzioni malloc e free).
Indice
1. Tipologia della classe..............................................................................................................2
2. Obiettivi didattici....................................................................................................................2
3. Situazione iniziale...................................................................................................................3
4. Aspetti motivazionali e metodologia didattica........................................................................3
5. Pianificazione di dettaglio.......................................................................................................5
6. Aspetti interdisciplinari...........................................................................................................6
7. Sperimentazione......................................................................................................................7
8. Bibliografia.............................................................................................................................7
Allegato: Testo della verifica sommativa....................................................................................8
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 1 di 9
1. Tipologia della classe
Il percorso si rivolge ad una classe quinta del Liceo Scientifico, opzione Scienze Applicate.
In questo corso di studi l'insegnamento di Informatica prevede due ore settimanali di lezione (66 ore teoriche
all'anno) per tutto il quinquennio.
2. Obiettivi didattici
Gli obiettivi didattici generali sono definiti, in termini di “Risultati di Apprendimento”, nel Profilo educativo
culturale e professionale dello studente [Profilo] ; sono poi dettagliati nelle Indicazioni Nazionali
[Indicazioni] per il Liceo Scientifico, opzione Scienze Applicate. Queste indicazioni specificano che:
“L’insegnamento di informatica deve contemperare diversi obiettivi:
•
comprendere i principali fondamenti teorici delle scienze dell’informazione,
•
acquisire la padronanza di strumenti dell’informatica,
•
utilizzare tali strumenti per la soluzione di problemi significativi in generale, ma in
particolare connessi allo studio delle altre discipline,
•
acquisire la consapevolezza dei vantaggi e dei limiti dell’uso degli strumenti e dei metodi
informatici e delle conseguenze sociali e culturali di tale uso.“
In particolare, nel quinto anno:
“Sono studiati i principali algoritmi del calcolo numerico (CS), introdotti i principi teorici
della computazione (CS) e affrontate le tematiche relative alle reti di computer, ai
protocolli di rete, alla struttura di internet e dei servizi di rete (RC) (IS). Con
l'ausilio degli strumenti acquisiti nel corso dei bienni precedenti, sono inoltre
sviluppate semplici simulazioni come supporto alla ricerca scientifica (studio
quantitativo di una teoria, confronto di un modello con i dati…) in alcuni esempi,
possibilmente connessi agli argomenti studiati in fisica o in scienze (CS).”
In questo ambito si è identificato un percorso didattico che comprende:
• l'algoritmo di ricerca binaria in un array ordinato;
• la complessità computazione dell'algoritmo;
• alberi binari di ricerca (BST, Binary Search Tree);
• la ricorsione;
• l'algoritmo di bisezione, per la ricerca di uno zero di una funzione continua.
Il percorso è didatticamente significativo per svariate ragioni:
• le molteplici applicazioni forniscono una motivazione chiara ed un vasto insieme di esempi;
• l'algoritmo e le sue proprietà sono sufficientemente semplici da consentire una trattazione
sostanzialmente completa e rigorosa; in particolare consente di introdurre il fondamentale concetto
di complessità computazionale di un algoritmo in un caso importante ma matematicamente semplice;
• ha applicazioni sia di tipo non numerico (ricerca in un array di chiavi ordinate, ricerca in un albero)
che di tipo numerico (ricerca di uno zero di una funzione continua con il metodo di bisezione),
consentendo un collegamento interdisciplinare con il parallelo insegnamento di Matematica;
• l'implementazione degli algoritmi in programmi può essere affidata come esercizio guidato agli
studenti stessi, mostrando come gli aspetti teorici (matematici) e quelli pratici (programmazione)
dell'informatica siano distinti ma fortemente intrecciati;
• l'estensione al caso dei BST consente di studiare una struttura dati complessa, che include concetti
non elementare come l'allocazione dinamica della memoria ed uso di puntatori;
• infine gli algoritmi di gestione dei BST forniscono esempi significativi dell'uso della ricorsione:
mentre nei casi semplici in cui viene usualmente introdotta, come il calcolo del fattoriale o della
successione di Fibonacci, un'alternativa iterativa è facilmente disponibile e quindi la ricorsione può
sembrare uno strumento forse elegante ma di discutibile utilità, nel caso della di BST non vi sono
alternative iterative semplici, e quindi se ne può mostrare l'utilità.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 2 di 9
Alla fine del percorso, la studente dovrebbe aver acquisito diverse conoscenze e competenze:
Conoscenze (sapere)
Algoritmo di ricerca binaria
Alberi di ricerca binaria
Algoritmo di bisezione
Concetto di complessità computazionale
Concetto di algoritmo ricorsivo
L'allocazione dinamica della memoria
Competenze (saper fare)
Scrittura di programmi con uso di puntatori e
memoria dinamica.
Scrittura di programmi ricorsivi.
Scrittura di programmi di calcolo numerico.
3. Situazione iniziale
Si ipotizza che la classe disponga di:
• sufficiente competenza nella programmazione in un linguaggio C-like; usualmente questa
competenza viene sviluppata nell'arco del 2°, 3°e 4° anno; in particolare una conoscenza elementare
dell'uso dei puntatori.
• conoscenza del concetto di continuità e, possibilmente, del teorema degli zeri (argomenti svolti
parallelamente nell'insegnamento di Matematica); questo consente la trattazione dell'algoritmo di
bisezione per il calcolo di uno zero;
• facoltativamente, la conoscenza del principio di induzione (che può essere stato trattato nel corso di
Matematica); questa consentirebbe una dimostrazione rigorosa della complessità computazionale
dell'algoritmo di ricerca binaria; altrimenti la dimostrazione verrà data con minor rigore;
4. Aspetti motivazionali e metodologia didattica
Un aspetto essenziale da considerare è quello motivazionale. Suscitare l'interesse può essere più o
meno difficile a seconda del contesto; usualmente nella tipologia di classe che si sta considerando
(5a Liceo Scientifico delle Scienze Applicate) possono essere sufficientemente motivati illustrando
da un lato l'utilità dell'argomento in contesti a loro familiari, dall'altro facendo leva sulla curiosità.
Gli argomenti trattati sono sufficientemente ricchi di applicazioni da fornire svariati esempi
interessanti:
•
•
•
gli algoritmi di ricerca in elenchi ordinati-al di là dei consueti esempi basati su vocabolari,
enciclopedie ed elenchi telefonici- possono essere usati dai vari meccanismi di autocompletamento
così diffusi in ambito Web, negli editor per telefonini, nei correttori ortografici di svariati software
applicativi; e sono tutte situazioni in cui le dimensioni degli elenchi è vasta e la velocità di risposta
essenziale;
gli esempi riportati riguardano sia strutture essenzialmente statiche per cui un array è adeguato (i
dizionari dei correttori ortografici e degli editor per telefonini) sia fortemente dinamiche, per cui si
richiede un BST (le ricerche più frequenti in ambito Web).
la maggioranza delle equazioni algebriche di interesse pratico non sono risolubili che con metodi
numerici come la bisezione: ad es. l'equazione di Keplero per determinare la posizione di un pianeta,
problema ben noto dagli studi di Scienze e Fisica.
La strategia didattica sarà basata principalmente sui concetti della pedagogia costruttivista, che del resto si
impone quasi naturalmente in un corso di informatica, facendo per quanto possibile uso del laboratorio;
infatti si intende fornire agli studenti solo la descrizione generale degli algoritmi, sia per la ricerca binaria
che per la bisezione, lasciandone la realizzazione in Javascript ed in C agli studenti.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 3 di 9
In aggiunta alle motivazione psico-pedagogiche generali che spingono in questa direzione, l'esperienza
personale mi ha mostrato che i concetti spiegati in modo astratto, mediante ad esempio lezioni frontali, o
anche concretizzati in laboratorio ma vissuti passivamente, ad esempio la copiatura e/o la fruizione di
programmi scritti dall'insegnante durante la lezione, lascia ben poco agli studenti, passato il momento della
verifica. L'informatica, come tutte le discipline tecnico-scientifiche, richiede invece che lo studente
metabolizzi concetti e competenze, su cui in seguito costruire i nuovi concetti e le competenze più avanzate.
Gli strumenti utilizzati saranno tre:
• alcune (poche) slide, per trattare gli aspetti generali e teorici: la descrizione degli algoritmi e delle
strutture dati, il calcolo della complessità computazionale, ecc.;
• un ambiente Javascript, predisposto all'uopo, in cui integrare il codice degli algoritmi di ricerca
(sequenziale e binaria, iterativa e ricorsiva) da confrontare, che consenta la visualizzazione grafica
del processo di ricerca;
• ambiente di sviluppo C (o C++), per l'implementazione ed il test dell'algoritmo numerico di calcolo
dello zero per bisezione e degli algoritmi su BST.
Slides
Senza mitizzarle o sminuirle -come spesso si usa fare- l'utilizzo delle slide ha alcuni significativi vantaggi:
• la presentazione risulta più curata e gradevole di quanto sia possibile fare alla lavagna; questo è vero in
particolar modo quando sono richieste figure di una certa complessità, ad esempio la successiva bisezione di
un array: l'uso di colori diversi, di linee continue o tratteggiate consente una chiarezza espositiva molto
maggiore di quella consentita da un disegno alla lavagna;
• si risparmia il tempo del disegno; questo è particolarmente significativo
quando occorre ritornare su di un punto trattato in precedenza, per fornire
chiarimenti, senza dover rifare un disegno magari complesso;
• è possibile fornire, dopo la lezione, le slide agli studenti, senza che
questo favorisca la pigrizia di non prendere appunti, che sono fondamentali
in quanto costituiscono il primo momento di rielaborazione personale, e
quindi di costruzione dell'apprendimento; occorre per questo avere la
cautela di dare alle slide il loro giusto senso, ovvero di uno scheletro su cui
Una slide che mostra la logica
si costruisce il discorso, e che risultano quindi scarsamente utili senza il
dell'algoritmo di ricerca binaria
supplemento degli appunti.
Sottolineiamo infine come l'uso di slide non sia necessariamente la scelta migliore: per la descrizione
dell'algoritmo di bisezione per la ricerca degli zeri di una funzione continua una classica lezione alla lavagna
sembra più efficace.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 4 di 9
Javascript
L'ambiente Javascript ha il vantaggio di consentire una presentazione grafica, e quindi immediata ed
intuitiva, del processo di ricerca; inoltre consente agli studenti di provare il programma scritto da essi stessi,
e non di fruire passivamente di un oggetto fornito da altri. La somiglianza della sintassi di Javascript con il
C/C++ consente poi la realizzazione del programma anche senza una conoscenza specifica ed approfondita
di Javascript.
L'ambiente Javascript per lo studio degli algoritmi di ricerca
C
Analogamente, l'ambiente C consente la realizzazione, guidata, da parte degli studenti dell'algoritmo di
bisezione e di ricerca nel BST.
Esecuzione del programma di ricerca nei BST
5. Pianificazione di dettaglio
In seguito si dettaglia l'unità didattica nella successione di attività che si ritengono più adeguate al
raggiungimento degli obiettivi.
In totale, l'unità è prevista richiedere circa 11-12 ore di lezione, ovvero circa un mese e mezzo.
Si è supposta la disponibilità di un laboratorio di informatica.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 5 di 9
La colonna verifica specifica le attività di verifica formativa (che hanno per scopo monitorare il processo
d'apprendimento durante il suo svolgimento e quindi adattare i percorsi ed attuare strategie di recupero in
itinere) e sommative (a conclusione dell'unità didattica, per verificare l'apprendimento individuale e
complessivo)1.
Argomento
Durata
[h]
Algoritmo di ricerca binaria su
array ordinati
0,5
Implementazione
dell'algoritmo in versione
iterativa
1,5 (*)
Sperimentazione con
l'algoritmo; determinazione
della complessità
computazionale.
1
Algoritmo di bisezione per la
ricerca degli zeri di una
funzione continua
Implementazione
dell'algoritmo di bisezione
0,5
1,5 (*)
Metodologia
Verifica
Lezione frontale con slide
Attività di laboratorio, svolta dagli studenti
con l'ausilio di un ambiente Javascript
predisposto
Form.
Attività mista, con sperimentazione in
laboratorio e lezione frontale con slide per la
determinazione della complessità
computazionale.
Lezione frontale con lavagna classica.
Attività di laboratorio, svolta dagli studenti in Form.
ambiente C.
La ricorsione.
1
Attività mista: lezione frontale più attività di
implementazione in casi semplici (fattoriale,
Fibonacci).
Form.
Algoritmo di ricerca binaria in
versione ricorsiva.
1
Attività di laboratorio, svolta dagli studenti
con l'ausilio dell' ambiente Javascript
predisposto
Form.
Gli alberi binari e
l'allocazione dinamica della
memoria
2
Lezione frontale con ausilio di slide.
Sperimentazione su BST.
Verifica finale
2(*)
1
Attività in laboratorio, svolta dagli studenti in Form.
ambiente C.
Test scritto (riportato in allegato)
Somm.
(*) Più lavoro svolto individualmente a casa
6. Aspetti interdisciplinari
Esiste un chiaro legame con l'insegnamento di matematica, in particolare:
• dimostrazione della complessità computazionale dell'algoritmo di bisezione, fatta per induzione;
• calcolo dello zero di una funzione continua, basata sul concetto di continuità.
1
Per le modalità di valutazione, si veda ad es. [Domenici 2009], pp 48 ss.; citato in [Capperucci 2010], pp. 42 ss.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 6 di 9
7. Sperimentazione
Essendo l'attività partita ad anno scolastico ormai quasi al termine, non è stato possibile realizzare
effettivamente l'attività in classe.
Si è tuttavia riuscito a ritagliarne una piccola parte, svolta in una singola lezione: descrizione degli algoritmi
di ricerca sequenziali e binari e calcolo della complessità computazionale.
La lezione è stata svolta in aula con lavagna tradizionale, senza nessun ausilio tecnico a causa della non
disponibilità del laboratorio d'informatica.
La classe, una IV liceo scientifico opzione scienze applicate, è composta da 19 studenti, con una storia
didattica alle spalle abbastanza travagliata: hanno cambiato insegnante ogni anno. Questo ha fatto sì che,
all'inizio dell'anno, la maggioranza degli studenti non fosse in grado di scrivere nemmeno programmi
elementari, eccezion fatta per tre di loro che erano, al contrario, assai competenti, per via di un interesse
personale, extra-scolastico, alla materia.
La sperimentazione ha dato esiti sostanzialmente positivi: nonostante la trattazione si sia mantenuta su di un
livello piuttosto astratto, a causa dell'impossibilità per le menzionate ragioni di tempo di sviluppare la parte
implementativa, la classe ha mostrato un buon livello di interesse; da un lato sembra aver compreso l'utilità
di valutare la complessità computazionale di un algoritmo e poterne quindi selezionare uno sufficientemente
efficiente per l'applicazione di interesse; dall'altro anche la soluzione dell'equazione ricorsiva della
complessità dell'algoritmo di ricerca binaria, nonostante fosse la prima volta che incontrassero questo tipo di
equazioni e nonostante non conoscessero il principio d'induzione matematica, ha potuto essere presentata
senza particolari difficoltà di comprensione.
Poiché l'attività didattica si è conclusa in circa mezz'ora, nella seconda parte ho trattato i problemi di
ordinamento: un'obiezione posta dai ragazzi sulla validità dell'algoritmo di ricerca binaria è stata infatti la
necessità di disporre di un array ordinato.
La necessità di un algoritmo di ordinamento si è quindi presentata da sola.
Ho quindi mostrato la logica di funzionamento dell'algoritmo mergesort e ricavato l'equazione ricorsiva
della complessità computazionale, dandone poi direttamente la soluzione.
L'algoritmo ha suscitato diverse perplessità, dovute alla sua natura inerentemente ricorsiva – l'argomento
della ricorsione non era stato mai affrontato. Qualche esemplificazione le ha momentaneamente tacitate, ma
evidentemente si tratta di concetti che richiederebbero più tempo e sopratutto un'attività d'implementazione
pratica per essere realmente intesi.
8. Bibliografia
[Profilo 2010]
Profilo educativo culturale e professionale dello studente; allegato A al Regolamento recante
“Revisione dell’assetto ordinamentale, organizzativo e didattico dei licei ai sensi dell’articolo
64, comma 4, del DL 25 giugno 2008, n. 112, convertito dalla legge 6 agosto 2008, n. 133”, 15
marzo 2010.
[Indicazioni 2010]
Schema di regolamento recante “Indicazioni nazionali riguardanti gli obiettivi specifici di
apprendimento concernenti le attività e gli insegnamenti compresi nei piani degli studi previsti
per i percorsi liceali di cui all’articolo 10, comma 3, del DPR 15 marzo 2010, n. 89, in relazione
all’articolo 2, commi 1 e 3, del medesimo regolamento.”
[Domenici 2009]
G. Domenici, Descrittori dell'apprendimento, ed. Monolite, Roma, 2009
[Capperucci 2010]
D. Capperucci (a cura di), La Valutazione degli apprendimenti in ambito scolastico,
FrancoAngeli 2010.
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 7 di 9
Allegato: Testo della verifica sommativa
Liceo XXXXX
a.s. 2013/2014
Classe YY - Verifica di Informatica
1a) Si costruisca e disegni l'albero binario di ricerca (BST) che memorizza i seguenti elementi:
Arancia Banana Ciliegia Dattero Fragola Lampone
1b) Quanti passi occorrono per trovare l'elemento Dattero?
1c) Quanti passi occorrono prima di stabilire che l'elemento Carota non appartiene all'albero?
[1+0,5+0,5 punti]
2) Un navigatore satellitare impiega mediamente 2 secondi a trovare una via, impostata dall'utente, in un
elenco memorizzato di 3 milioni di vie. Sapendo che la ricerca è fatta con un'algoritmo di ricerca binaria su
array ordinati, quando tempo occorre, mediamente, per leggere una via dell'elenco e confrontarla con quella
cercata?
[1,5 punti]
3) La seguente funzione cancella un albero binario, ma contiene un errore. Quale?
void CancellaAlbero (pNodo Radice){
//caso banale: termina la ricorsione
if (Radice==NULL) return;
//dealloco il valore ed il nodo
free(Radice->Valore);
free(Radice);
//cancello ricorsivamente i sottoalberi destri e sinistri
CancellaAlbero (Radice->Destro);
CancellaAlbero (Radice->Sinistro);
}
[1,5 punti]
4) Date le seguenti definizioni di un albero binario di ricerca, contenente numero di matricola e numero di
telefono dei dipendenti di un'azienda, ordinato per numero di matricola;
//Puntatore ad un nodo dell'albero
typedef struct Nodo* pNodo;
//Nodo dell'albero
typedef struct Nodo {
int Matricola;
int NumeroTelefono;
pNodo Destro;
pNodo Sinistro;
} tNodo;
// numero di matricola del dipendente; è la chiave di ordinamento
// cellulare aziendale
//puntatore al figlio destro
//puntatore al figlio sinistro
si scriva
a) una funzione che alloca un nodo dell'albero, lo inizializza opportunamente e ne restituisce il puntatore;
b) una funzione che, dato come parametro la radice dell'albero, ne stampa il contenuto ordinato per
matricola crescente.
[2+2 punti]
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 8 di 9
Soluzioni
1a)
Ciliegia
Banana
Arancia
Fragola
Dattero
Lampone
1b) 3 confronti
1c) 2 confronti
2) Se τ è il tempo di lettura e confronto, il tempo di ricerca sarà T =τ log 2 (3 106)=2 s
quindi
τ≈93 ms .
3) Il nodo è deallocato con la free e successivamente i suoi campi vengono utilizzati come parametri
nelle chiamate ricorsive.
4a)
pNodo CreaNodo(int NumMatricola, int NumTelefono){
//alloco il nodo
pNodo p=malloc(sizeof(tNodo));
if (p==NULL) return NULL;
//inizializzo i valori
p->Matricola=NumMatricola;
p->NumeroTelefono=NumTelefono;
//inizializzo i puntatori ai figli
p->Destro=NULL;
p->Sinistro=NULL;
return p;
}
4b)
void StampaAlbero(pNodo pAlbero){
//caso banale che termina la ricorsione
if (pAlbero==NULL) return;
StampaAlbero (pAlbero->Sinistro);
printf("%d %d \n",pAlbero->Matricola, pAlbero->NumeroTelefono);
StampaAlbero (pAlbero->Destro);
}
R. Gallerini- Pianificazione di unità didattica
PAS 2014 - A042 (Informatica)
pag. 9 di 9