Algoritmi e Strutture Dati - CittàStudiEdizioni PDF... · Bertossi, Montresor, Algoritmi e...

26
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.

Transcript of Algoritmi e Strutture Dati - CittàStudiEdizioni PDF... · Bertossi, Montresor, Algoritmi e...

  • 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