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 21 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): 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