Algoritmi e Strutture Dati
Capitolo 1 - Introduzione
Alberto Montresor
Università di Trento
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view
a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative
Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Introduzione
Problema computazionale
✦ 
La relazione formale che intercorre fra l'input e l'output desiderato
✦ 
Algoritmo
✦ 
La descrizione di una sequenza di azioni che un esecutore deve
compiere per giungere alla soluzione di un problema
✦ 
Gli algoritmi rappresentano e organizzano input, output
e tutti i dati intermedi necessari per lo svolgimento
✦ 
Esempio
✦ 
Input: ingredienti
Algoritmo: ricetta
✦ 
Output: piatto cucinato
Esecutore: cuoco
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Un po' di storia
Algoritmi nella storia
✦ Papiro di Ahmes (algoritmo per la moltiplicazione)
✦ Algoritmi di tipo numerico furono studiati da matematici babilonesi
ed indiani
✦ Algoritmi in uso fino a tempi recenti furono studiati dai matematici
greci più di 2000 anni fa
✦ Algoritmo di Euclide per il Massimo Comune Divisore
✦ Algoritmi geometrici (calcolo di tangenti, sezioni di angoli, ...)
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Un po' di storia
Abu Abdullah Muhammad bin Musa
al-Khwarizmi
✦ Al-Kitāb al-muḫtaṣar fī ḥisāb al-ğabr
wa-l-muqābala
✦ Famoso per:
✦ essere uno dei padri dell'algebra
✦ aver introdotto i numeri indiani
nel mondo occidentale
✦ un notevole influsso sulle lingue:
✦ algorismus, algoritmo, algorithm
✦ algebra
✦ spagnolo: guarismo
portoghese: algarismo
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Problema computazionale: esempi
Minimo
✦ 
Il minimo di un insieme A è l’elemento di A che è minore o uguale ad
ogni elemento di A
✦ 
Ricerca
✦ 
Sia A=a1,...,an una sequenza di dati ordinati e distinti, a1 < a2 < ··· < an.
Eseguire una ricerca della posizione di un dato v in A consiste nel
restituire l’indice corrispondente, se v è presente, oppure 0, se v non è
presente
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Algoritmo: esempio
Minimo
✦ 
Per trovare il minimo di un insieme, confronta ogni elemento con tutti
gli altri; l’elemento che è minore di tutti è il minimo.
✦ 
Ricerca
✦ 
Per trovare un valore v nella sequenza A, confronta v con tutti gli
elementi di A, in ordine, e restituisci la posizione corrispondente;
restituisci 0 se nessuno degli elementi corrisponde.
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Problemi
Le descrizioni precedenti presentano diversi problemi:
✦  Descrizione
✦ Descritti in linguaggio naturale, imprecisi
✦ Abbiamo bisogno di un linguaggio più formale
✦  Valutazione
✦ Esistono algoritmi “migliori” di quelli proposti?
✦ Dobbiamo definire il concetto di migliore
✦  Progettazione
✦ Questi problemi sono semplici
✦ Problemi più complessi devono essere affrontati con opportune
tecniche di programmazione
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Come descrivere un algoritmo
E' necessario utilizzare una descrizione il più possibile formale
✦ 
Indipendente dal linguaggio: “Pseudo-codice”
✦ 
Particolare attenzione va dedicata al livello di dettaglio
✦ 
Da una ricetta di canederli (google:canederli ricetta), leggo:
“... amalgamate il tutto e fate riposare un quarto d'ora...”
✦ 
Cosa significa “amalgamare”? Cosa significa “far riposare”?
✦ 
E perché non c'è scritto più semplicemente “prepara i canederli”?
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Esempio: ricerca del minimo in un vettore
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Ricerca in un array ordinato
Problema
✦ 
Dato un vettore A contenente n elementi, verificare se un certo
elemento v è presente
✦ 
Esempi: elenco del telefono, dizionario
✦ 
Una soluzione “banale”
✦ 
Scorro gli elementi in ordine, finché non trovo
un oggetto “maggiore o uguale” a v
✦ 
1
5
12
15
20
23
32
21
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Ricerca in un array ordinato
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Pseudo-codice
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Pseudo-codice
Tipi di dato composto
✦ 
Vettori, matrici
✦ 
Record
✦ 
Puntatori
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Ricorsione
Versioni iterative / ricorsive
✦ 
Ricorsione di coda
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Problemi
Le descrizioni precedenti presentano diversi problemi:
✦ 
Descrizione
Descritti in linguaggio naturale, imprecisi
✦ 
Abbiamo bisogno di un linguaggio più formale
✦ 
✦ 
Valutazione
Esistono algoritmi “migliori” di quelli proposti?
✦ 
Dobbiamo definire il concetto di migliore
✦ 
✦ 
Progettazione
Questi problemi sono semplici
✦ Problemi più complessi devono essere affrontati con oppurtune
tecniche di programmazione
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi
Risolve correttamente il problema?
✦ 
Dimostrazione matematica, descrizione “informale”
✦ 
Nota: Alcuni problemi non possono essere risolti
✦ 
Nota: Alcuni problemi vengono risolti in modo approssimato
✦ 
Risolve il problema in modo efficiente?
✦ 
Definizione di “efficienza”?
✦ 
Alcuni problemi non possono essere risolti in modo efficiente
✦ 
Esistono soluzioni “ottime”: non è possibile essere più efficienti
✦ 
Quali altre proprietà entrano in gioco?
✦ 
Semplicità, modularità, manutenibilità, espandibilità, sicurezza e
robustezza
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - correttezza
Concetto di invariante
✦ 
Condizione sempre vera in un certo punto del programma
✦ 
Esempi:
✦ 
Invariante di ciclo:
✦ 
una condizione che è sempre vera all'inizio di un ciclo
✦ “inizio del ciclo”: da definire
✦ 
Invariante di classe:
✦ 
una condizione che è sempre vera al termine dell'esecuzione di
un metodo su una classe
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - correttezza
Invariante di min()
✦ 
All'inizio di ogni iterazione del ciclo for, la variabile min contiene il
minimo parziale degli elementi A[1 .. i − 1]
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - correttezza
Il concetto di invariante di ciclo ci aiuta a dimostrare la correttezza di un
algoritmo:
✦ Inizializzazione (caso base):
✦ la condizione è vera all'inizio
✦ Conservazione (passo induttivo):
Induzione
✦ se la condizione è vera prima di un'iterazione
del ciclo, allora rimane vera al termine
(quindi prima della successiva iterazione)
✦ Conclusione:
✦ Quando il ciclo termina, l'invariante deve
rappresentare la “correttezza” dell'algoritmo
✦ Domanda
✦ Dimostrare che l'invariante di min() è rispettato
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - correttezza
Domanda: dimostrazione di correttezza di binarySearch()
✦ 
Suggerimento: per induzione sulla dimensione dell’input
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - efficienza
Complessità di un algoritmo
✦ 
Analisi delle risorse impiegate da un algoritmo per risolvere un
problema, in funzione della dimensione e dal tipo dell'input
✦ 
Risorse
✦ 
Tempo: tempo impiegato per completare l'algoritmo
✦ 
Spazio: quantità di memoria utilizzata
✦ 
Banda: quantità di bit spediti
✦ 
Algoritmi distribuiti
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - efficienza
Contiamo il numero di confronti per il problema del minimo
✦ 
Algoritmo “banale” accennato nell’introduzione: n(n-1)/2
✦ 
Algoritmo più efficiente: n-1
✦ 
Perché contare i confronti?
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - efficienza
Contiamo il numero di confronti per il problema della ricerca
✦ Algoritmo “banale” accennato nell’introduzione: n-1
✦ Algoritmo più efficiente: log n
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Valutazione algoritmi - altre proprietà
L’elenco può essere lungo:
✦ 
Semplicità, modularità, manutenibilità, espandibilità, sicurezza e
robustezza
✦ 
Out-of-scope per algoritmi e strutture dati
✦ 
Ingegneria del software
✦ 
Un commento:
✦ 
Alcune proprietà hanno un costo aggiuntivo in termini di prestazioni
✦ 
Codice modulare → costo gestione chiamate
✦ 
Java bytecode → costo interpretazione
✦ 
Progettare algoritmi efficienti è un prerequisito per poter pagare
questi costi
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Problemi
Le descrizioni precedenti presentano diversi problemi:
✦ 
Descrizione
Descritti in linguaggio naturale, imprecisi
✦ 
Abbiamo bisogno di un linguaggio più formale
✦ 
✦ 
Valutazione
Esistono algoritmi “migliori” di quelli proposti?Dobbiamo definire il
concetto di migliore
✦ 
✦ 
Progettazione
Questi problemi sono semplici
✦ 
Problemi più complessi devono essere affrontati con oppurtune
tecniche di programmazione
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Come organizzare un algoritmo
Base di conoscenza
Liste
✦ 
Strutture di dati
✦ 
Problemi “classici” e
loro soluzioni
✦ 
Tecniche di progettazione
✦ 
Divide-et-impera
✦ 
Programmazione dinamica
✦ 
Greedy
✦ 
Ricerca locale
✦ 
Backtrack
✦ 
Probabilismo
✦ 
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola