[01] Algoritmi e Implementazione

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    [01] Algoritmi e Implementazione - Presentation Transcript

    1. Algoritmi e loro implementazione in Java Dott. Francesco De Angelis francesco.deangelis@unicam.it Dipartimento di Matematica e Informatica Laboratorio di Algoritmi e Stutture Dati - AA 2009/10
    2. Sommario • Ciclo di sviluppo del codice algoritmico • Fase di progettazione • Fase di realizzazione • Implementazione in Java 2
    3. Ciclo di svilppo di codice algoritmico • Lo sviluppo di software robusto ed efficiente richiede: • creatività • capacità di astrazione • familiarità con strumenti matematici • padronanza di un linguaggio di programmazione • conoscenza delle caratteristiche della piattaforma di calcolo • Distinguiamo una fase progettuale ed una fase realizzativa 3
    4. Fase Progettuale • Tramite l’analisi dei requisiti si definisce in modo preciso e non ambiguo il problema di calcolo che si intende risolvere • Con la valutazione delle difficoltà vorremmo sempre minimizzare le risorse ma esistono limiti inferiori oltre i quali non è possibile scendere • ogni algoritmo richiede inevitabilmente risorse di calcolo in termini di tempo e di spazio • stimare questi limiti è utile per valutare la difficoltà intrinseca di un problema • Per un dato problema algoritmico possono essere progettati algoritmi risolutivi diversi • L’obiettivo è trovare il metodo che faccia un uso ottimale delle risorse di calcolo • Definito l’algoritmo è necessario effettuare un’analisi di correttezza formale • ad esempio dimostrando che proprietà dell’algoritmo vengono mantenute ad ogni passo 4
    5. Fase Progettuale • Inoltre è necessario effettuare una verifica delle prestazioni • Un’attenta analisi teorica aiuta a scegliere tra diverse soluzioni allo stesso problema prima di effettuare l’implementazione • Per rendere indipendente l’analisi dalla particolare istanza si esprime il tempo di esecuzione in funzione della dimensione dell’istanza di ingresso • Possiamo distingure diverse tipologie di analisi: • caso peggiore misura il tempo nel caso di istanze sfavorevoli per l’algoritmo • caso migliore misura il tempo per le istanze favorevoli per l’algoritmo • caso medio esprime il tempo utilizzato “in media” (in funzione della distribuzione statistica dei dati in ingresso) • E’ comodo usare la notazione asintotica, usata per quantificare qualsiasi tipo di risorsa di calcolo 5
    6. Notazione Asintotica • L’idea di base è trattare due funzioni come “uguali” se i loro valori differiscono solo per un fattore costante • Per n sufficientemente grande (n ≥ n0) e per opportune costanti moltiplicative (c, c1, c2) si ha: • se una funzione g(n) ∈ O(f (n)), allora g(n) cresce al più come f (n) • se una funzione g(n) ∈ Ω(f (n)), allora g(n) cresce almeno come f (n) • se una funzione g(n) ∈ Θ(f (n)) , allora g(n) cresce esattamente comef (n) • Questa analisi può essere usata per esprimere delimitazioni inferiori e superiori della complessità di un problema 6
    7. Fase Realizzativa • Progettare un algoritmo è solo il primo passo • nell’implementazione reale ci sono in genere più dettagli non specificati nello pseudocodice • occorre effettuare scelte ponderate che possono avere un impatto cruciale sui tempi di esecuzione • L’implementazione va collaudata per poter verificare eventuali errori e analizzata sperimentalmente (possibilmente su dati reali) • l’analisi sperimentale va utilizzata come raffinamento dell’analisi teorica • particolare attenzione va data all’impianto sperimentale usato 7
    8. Impianto sperimentale • La piattaforma usata può influenzare i risultati dei test • La qualità del codice quando si tratta di algoritmi approssimati (che forniscono risultati in minor tempo rispetto ad algoritmi esatti) • La misurazione dei tempi può essere effettuata con diversi livelli di granularità • orologio di sistema • funzioni di sistema che isolano il tempo di un singolo processo • utilizzare un profiler • Gli insiemi di dati di test possono influire sui risultati portando a conclusioni non generali • La riproducibilità dei risultati è fondamentale: piattaforma hardware e software, misurazione dei tempi e dati di test devono consentire la riproducibilità delle misurazioni 8
    9. Fase Realizzativa • L’ingegnerizzazione di un algoritmo si riferisce al trsformare la descrizione di alto livello di un algoritmo in una implementazione robusta, efficiente, modulare, ben testata e facilmente utilizzabile • Ingegnerizzare comporta decidere l’organizzazione e le modalità di accesso ai dati 9
    10. Implementare in java • Usiamo per le nostre implementazioni il linguaggio Java • Implementazioni differenti devono usare la stessa interfaccia in modo da rendere il codice “intercambiabile” • In java utilizzo di interface e diverse implementazioni • possibilità di usare il polimorfismo nell’uso dell’algoritmo • Uso del “boxing”, ossia incapsulare tipi primitivi in classi wrapper (Integer, Float, Double, ...) [NB: Java 1.5 supporta boxing e unboxing in maniera trasparente] • Confronto tramite il metodo equals: ereditato da Object deve essere ridefinito in modo da valutare l’uguaglianza 10
    11. Implementare in java • Ordinamento naturale eseguito con compareTo ereditato dall’interfaccia Comparable • a.compareTo(b) è negativo se a “è minore” di b • a.compareTo(b) è zero se a “è uguale” a b • a.compareTo(b) è positivo se a “è maggiore” di b • Se una classe implementa Comparable diciamo che sui suoi oggetti è definito un ordinamento naturale • Situazioni di errore dovute al mancato rispetto di precondizioni per l’esecuzione vanno gestite con le eccezioni • gestione di eventi anomali durante l’esecuzione di un programma • Per passare in rassegna elementi di una collezione utilizzeremo gli iteratori. Questo permette di ottenere, uno alla volta, tutti gli elementi della collezione • Ogni classe che rappresenta collezioni di elementi dovrebbe implementare l’interfaccia Iterable quindi il metodo iterator 11
    12. Java Collections Framework • Raggruppato nel package java.util fornisce il supporto per manipolare collezioni di oggetti, oltre che algoritmi per ordinamento e ricerca. • Il nucleo principale fornisce : • Collection Interfaces (Collection, Set, List, ...) • General-Purpose Implementations (ArrayList, LinkedList, ...) • Algorithms (metodi statici per ordinamento e ricerca) • Infrastructures (classi e interfacce di supporto, Comparable, Iterable, ...) 12
    13. Riferimenti • [DPFI07] §1 - Algoritmi e loro implementazione in Java Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia. 13 Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-nc-sa/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

    + Francesco De AngelisFrancesco De Angelis, 3 months ago

    custom

    77 views, 0 favs, 2 embeds more stats

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 77
      • 73 on SlideShare
      • 4 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds
    • 3 views on http://francescodeangelis.wordpress.com
    • 1 views on http://www.slideshare.net

    more

    All embeds
    • 3 views on http://francescodeangelis.wordpress.com
    • 1 views on http://www.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories