Algoritmi e Strutture Dati

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 19 - Tecniche risolutive per problemi intrattabili Alberto Montresor Università di Trento This.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI
G. Mecca – – Università della Basilicata Basi di Dati Progettazione di Basi di Dati: Introduzione versione 2.0 Questo lavoro è concesso.
G. Mecca – – Università della Basilicata Tecnologie di Sviluppo per il Web Valutazione della Qualità del Codice HTML versione 2.0 Questo.
G. Mecca – – Università della Basilicata Basi di Dati Sistemi per Basi di Dati Relazionali: Modello Logico Concetti Fondamentali versione.
Tecnologie di Sviluppo per il Web
G. Mecca – – Università della Basilicata Tecnologie di Sviluppo per il Web XML: Dettagli e Approfondimenti versione 2.0 Questo lavoro è
Progettazione e Forme Normali
Programmazione Procedurale in Linguaggio C++
Capitolo 1 Unintroduzione informale agli algoritmi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati con Laboratorio (Modulo I)
La valutazione delle espressioni
Il problema del dizionario
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Elementi di Informatica
Elementi di Informatica
Da Problema a Programmazione
Biologia Computazionale - Algoritmi
Dall’algoritmo al programma.
Moltiplicare con Neper
UN SEMPLICE PIANO DI MARKETING
RICERCA DI MERCATO PER NON ADDETTI
Note di comunicazione business to business A cura di Bonucchi & Associati srl Questo documento è di supporto a una presentazione verbale. I contenuti potrebbero.
Riconfigurare il diritto dautore. Lipertesto, una necessità di riconfigurazione. Secondo G. P. Landow, lavvento dellipertesto implica la necessità di.
Marketing e comunicazione: gli strumenti di comunicazione
Lanalisi di settore a cura di Bonucchi & Associati srl Questo documento è di supporto a una presentazione verbale. I contenuti potrebbero non essere correttamente.
LE PROPRIETA' DELLE PROPORZIONI Prodotto da Prof.ssa Maria Raschello
CALCOLO DEL TERMINE INCOGNITO
IO E LA MATEMATICA PROCEDURALE
Le opportunità di marketing per le PMI offerte dal web 2.0 a cura di Bonucchi e associati Srl Questo documento è di supporto a una presentazione verbale.
Esempi di posizionamento prodotti
Algoritmi e Strutture Dati
Programmazione Procedurale in Linguaggio C++
Introduzione: informatica 18/2/2013 Informatica applicata alla comunicazione multimediale Cristina Bosco.
La ricorsione.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Il computer ragiona? Problemi e algoritmi. Paola Pianegonda2 Cos’è un problema?  Problema è qualsiasi situazione della quale non conosciamo la soluzione.
Programmazione dei Calcolatori Elettronici
Dal problema al programma
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
(tu) parli (voi) parlate Imperativo informale The imperative is used to express an order, a suggestion, an invitation or a request. Imperativo Presente.
Statistiche d'ordine Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Gestione della memoria
Logica binaria Moreno Marzolla
Programmazione Procedurale
Transcript della presentazione:

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. © Alberto Montresor

Problema computazionale 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 © Alberto Montresor

Algoritmi nella storia 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, ...) © Alberto Montresor

Abu Abdullah Muhammad bin Musa al-Khwarizmi 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 © Alberto Montresor

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 © Alberto Montresor

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 sequenza, e restituisci la posizione corrispondente; restituisci 0 se nessuno degli elementi corrisponde. © Alberto Montresor

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 © Alberto Montresor

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”? © Alberto Montresor

Esempio: ricerca del minimo in un vettore © Alberto Montresor

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 1 5 5 12 12 15 15 20 20 23 23 32 21 © Alberto Montresor

Ricerca in un array ordinato Una soluzione efficiente Considero l'elemento centrale (indice m) del vettore Se A[m] = v, ho finito Se v < A[m], cerco nella “metà di sinistra” Se A[m] < v, cerco nella “metà di destra” m 1 1 5 12 5 12 15 15 15 20 23 32 21? © Alberto Montresor

Ricerca in un array ordinato Una soluzione efficiente Considero l'elemento centrale (indice m) del sottovettore che sto analizzando: Se A[m]=v, ho finito Se v<A[m], cerco nella “metà di sinistra” Se A[m]<v, cerco nella “metà di destra” m 1 5 12 1 5 12 15 15 15 20 23 23 32 23 32 21? © Alberto Montresor

Ricerca in un array ordinato Una soluzione efficiente Considero l'elemento centrale (indice m) del sottovettore che sto analizzando: Se A[m]=v, ho finito Se v<A[m], cerco nella “metà di sinistra” Se A[m]<v, cerco nella “metà di destra” m 1 5 12 1 5 12 15 15 15 20 20 32 23 23 23 32 21? © Alberto Montresor

Ricerca in un array ordinato © Alberto Montresor

Pseudo-codice www.xkcd.com 15 © Alberto Montresor

Pseudo-codice Tipi di dato composto Vettori, matrici Record Puntatori Procedure e funzioni Parametri formali Parametri attuali © Alberto Montresor

Versioni iterative / ricorsive Ricorsione di coda © Alberto Montresor

C’è qualcosa… che non va... Le descrizioni precedenti presentano diversi problemi: Descrizione Descritti in linguaggio naturale, imprecisi C’è bisogno di un linguaggio più formale Valutazione Esistono algoritmi “migliori”? Definire il concetto di migliore… www.xkcd.com © Alberto Montresor

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 © Alberto Montresor

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 Da dove “salta fuori” un invariante? Ovviamente, dalla definizione del codice; ovvero, chi scrive il codice ha in mente un invariante, e scrive il codice in modo opportuno. Per dimostrare la correttezza di un algoritmo, dobbiamo dimostrare che l'invariante è effettivamente rispettato. © Alberto Montresor

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] Da dove “salta fuori” un invariante? Ovviamente, dalla definizione del codice; ovvero, chi scrive il codice ha in mente un invariante, e scrive il codice in modo opportuno. Per dimostrare la correttezza di un algoritmo, dobbiamo dimostrare che l'invariante è effettivamente rispettato. © Alberto Montresor

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 Passo base: all’inizio del primo ciclo i = 2 e A[1..1] contiene il solo elemento A[1], che è stato precedentemente copiato in min. Passo induttivo: se min contiene il minimo di A[1..i − 1] all’inizio di un’iterazione, possono darsi due casi: se A[i] è minore di min, esso è il minimo di A[1..i], e viene correttamente copiato in min; altrimenti min rimane invariato. In entrambi i casi, il passo induttivo è dimostrato. Conclusione: al termine del ciclo, i=n+1 e min contiene il minimo di A[1..n] © Alberto Montresor

Valutazione algoritmi - correttezza Domanda: dimostrazione di correttezza di binarySearch() Suggerimento: per induzione sulla dimensione dell’input Dimensione sottovettore n=j-i+1 Caso base: Se n=0, i=j+1; la condizione del primo if è vera e binarySearch() restituisce correttemente 0 Passo induttivo per n>0: supponiamo che la condizione sia vera per ∀n’<n. Allora, i ≤ j, la prima condizione è falsa. Se si trova il valore nell’indice mediano, l’algoritmo termina restituendo questo indice; altrimenti il valore (se presente) si trova sicuramente prima o dopo l’indice mediano, a causa dell’ordinamento. Il vettore in cui cercare avrà quindi dimensione massima ⌊n/2⌋<n, e la chiamata ricorsiva verrà eseguita correttamente per l’ipotesi induttiva. © Alberto Montresor

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 © Alberto Montresor

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? Da dove “salta fuori” un invariante? Ovviamente, dalla definizione del codice; ovvero, chi scrive il codice ha in mente un invariante, e scrive il codice in modo opportuno. Per dimostrare la correttezza di un algoritmo, dobbiamo dimostrare che l'invariante è effettivamente rispettato. © Alberto Montresor

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 Da dove “salta fuori” un invariante? Ovviamente, dalla definizione del codice; ovvero, chi scrive il codice ha in mente un invariante, e scrive il codice in modo opportuno. Per dimostrare la correttezza di un algoritmo, dobbiamo dimostrare che l'invariante è effettivamente rispettato. © Alberto Montresor

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 © Alberto Montresor