Date post: | 02-May-2015 |
Category: |
Documents |
Upload: | nicolo-barone |
View: | 218 times |
Download: | 2 times |
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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.
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 cucinatoAlgoritmo: ricetta Esecutore: cuoco
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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, ...)
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: guarismoportoghese: 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 opportunetecniche di programmazione
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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”?
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Esempio: ricerca del minimo in un vettoreEsempio: 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 ordinatoRicerca in un array ordinato
1 5 12 15 20 23 321 5 12 15 20 23
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Ricerca in un array ordinatoRicerca 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 oppurtunetecniche di programmazione
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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
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 - 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]
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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
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 - 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?
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
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
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 oppurtunetecniche di programmazione
Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola
Come organizzare un algoritmoCome 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