1 © alberto montresor algoritmi e strutture dati capitolo 1 - introduzione alberto montresor...
TRANSCRIPT
1© Alberto Montresor
Algoritmi e Strutture DatiCapitolo 1 - Introduzione
Alberto MontresorUniversità 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.
2© Alberto Montresor
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 cucinatoAlgoritmo: ricetta Esecutore: cuoco
3© Alberto Montresor
Un po' di storiaUn 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, ...)
4© Alberto Montresor
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: guarismoportoghese: algarismo
5© Alberto Montresor
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
6© Alberto Montresor
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 sequenza, e restituisci la posizione corrispondente; restituisci 0 se nessuno degli elementi corrisponde.
7© Alberto Montresor
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
8© Alberto Montresor
Come descrivere un algoritmoCome 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”?
9© Alberto Montresor
Esempio: ricerca del minimo in un vettoreEsempio: ricerca del minimo in un vettore
10
© Alberto Montresor
✦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 ordinatoRicerca in un array ordinato
1 5 12 15 20 23 321 5 12 15 20 23
11
© Alberto Montresor
Una soluzione efficiente Considero l'elemento centrale (indice m) del vettore
Se A[m] = v, ho finito Se v < A[m], cerco nella “metà di sinistra” Se A[m] < v, cerco nella “metà di destra”
21?
Ricerca in un array ordinatoRicerca in un array ordinato
m
1 5 12 15 20 23 32151 5 12 15
12
© Alberto Montresor
✦Una soluzione efficiente✦Considero l'elemento centrale (indice m) del sottovettore che sto analizzando:
✦Se A[m]=v, ho finito✦Se v<A[m], cerco nella “metà di sinistra”✦Se A[m]<v, cerco nella “metà di destra”
21?
Ricerca in un array ordinatoRicerca in un array ordinato
m
1 5 12 15 20 23 32151 5 12 15 23 3223
13
© Alberto Montresor
✦Una soluzione efficiente✦Considero l'elemento centrale (indice m) del sottovettore che sto analizzando:
✦Se A[m]=v, ho finito✦Se v<A[m], cerco nella “metà di sinistra”✦Se A[m]<v, cerco nella “metà di destra”
21?
Ricerca in un array ordinatoRicerca in un array ordinato
m
1 5 12 15 20 23 32151 5 12 15 23 322320
14
© Alberto Montresor
Ricerca in un array ordinatoRicerca in un array ordinato
15
© Alberto Montresor
Pseudo-codice
15
www.xkcd.com
16
© Alberto Montresor
Pseudo-codice
✦Tipi di dato composto✦Vettori, matrici
✦Record
✦Puntatori
✦Procedure e funzioni✦Parametri formali
✦Parametri attuali
17
© Alberto Montresor
Ricorsione
✦Versioni iterative / ricorsive✦Ricorsione di coda
18
© Alberto Montresor
C’è qualcosa… che non va...
Le descrizioni precedenti presentano diversi problemi:
✦ Descrizione✦Descritti in linguaggio naturale, imprecisi
✦C’è bisogno di un linguaggio più formale
✦ Valutazione✦Esistono algoritmi “migliori”?
✦Definire il concetto di migliore…
www.xkcd.com
19
© Alberto Montresor
Valutazione algoritmiValutazione 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
20
© Alberto Montresor
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
21
© Alberto Montresor
Valutazione algoritmi - correttezzaValutazione 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]
22
© Alberto Montresor
Valutazione algoritmi - correttezzaValutazione 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
23
© Alberto Montresor
Valutazione algoritmi - correttezza
✦Domanda: dimostrazione di correttezza di binarySearch()✦Suggerimento: per induzione sulla dimensione dell’input
24
© Alberto Montresor
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
25
© Alberto Montresor
Valutazione algoritmi - efficienzaValutazione 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?
26
© Alberto Montresor
Valutazione algoritmi - efficienzaValutazione algoritmi - efficienza
✦Contiamo il numero di confronti per il problema della ricerca✦Algoritmo “banale” accennato nell’introduzione: n-1
✦Algoritmo più efficiente: log n
27
© Alberto Montresor
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