-
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De
Agostini Scuola�
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 Output: piatto cucinato Algoritmo: ricetta
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�
✦ 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
21
Ricerca in un array ordinato
1 5 12 15 20 23 32 1 5 12 15 20 23
-
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): ✦ 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
Induzione
-
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
Liste ✦ Base di conoscenza
✦ Strutture di dati
✦ Problemi “classici” e loro soluzioni
✦ Tecniche di progettazione
✦ Divide-et-impera
✦ Programmazione dinamica
✦ Greedy
✦ Ricerca locale
✦ Backtrack
✦ Probabilismo