algoritmi e strutture dati - cittàstudiedizioni pdf... · bertossi, montresor, algoritmi e...
TRANSCRIPT
-
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