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 Bertossi, Montresor, Algoritmi e strutture di dati © 2014 De Agostini Scuola 21 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