Ingegneria degli Algoritmi (II parte pratica)

Documenti analoghi
Esercitazione 6. Alberi binari di ricerca

Grafi: visita generica

Alberi binari e alberi binari di ricerca

Esercizi proposti 10

Per semplicità eliminiamo le ripetizioni nell'albero.

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Alberi binari di ricerca

Algoritmi e Strutture Dati

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Alberi Binari di Ricerca

alberi binari e ricorsione

TRIE (albero digitale di ricerca)

Algoritmi e Strutture Dati. HeapSort

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

28/02/2014 Copyright V. Moriggia

Problemi, istanze, soluzioni

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Progettazione di algoritmi

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Tipi di linea. Tipi di Linea - R.Virili 1

Le Funzioni e la Ricorsione

Introduzione al Python

Strutture dati e loro organizzazione. Gabriella Trucco

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni

Introduzione alla probabilità. Renato Mainetti

Pro/INTRALINK Guida al curriculum

Il concetto di calcolatore e di algoritmo

Linguaggi Regolari e Linguaggi Liberi

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

I Tipi di Dato Astratto

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità

Laboratorio 07. Programmazione - CdS Matematica. Michele Donini 10 dicembre 2015

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

perror: individuare l errore quando una system call restituisce -1

Il TDA Tree. Alberi. Esempio. Alberi. Applicazioni. Definizione di albero

21 - Alberi e Ricorsione

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Programmazione in Python. Moreno Marzolla

GeCoTi WEB. Modulo Gestione commesse

ADT Coda con priorità

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Lezione 3: File di input, File di output

Heap e code di priorità

Alberi binari. Esercizi su alberi binari

Lezione 10 programmazione in Java. Anteprima. Programmazione OO. La programmazione orientata agli Oggetti. Javadoc. Esercizi

Opzioni avanzate. Stampa di pagine di separazione. Stampante laser a colori Phaser 7750

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Lettura da tastiera e scrittura su monitor

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Principi e Metodologie della Progettazione Meccanica

INDICE. Vista Libretto Pt. Coordinate 2. Inserimento e modifica dei punti di coordinate note 4. Inserimento e modifica dei punti di orientamento 5

Mini-Corso di Informatica

UNIVERSITA DEGLI STUDI DI PERUGIA

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE TRIENNIO: TERZA DISCIPLINA: INFORMATICA

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

5 Array Cicli iterativi Contenuto di cella 28/02/2014 Copyright V. Moriggia 1

Esercizi Capitolo 6 - Alberi binari di ricerca

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Samsung Universal Print Driver Guida dell utente

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

lezione 9 min-heap binario Heap e Alberi posizionali generali

Esercitazione gennaio 2015

Proprietà delle Classi e degli Oggetti in Java

È giunto il momento di imparare a rappresentare visivamente i nostri dati: un buon grafico alle volte è più eloquente di pagine e pagine di dati.

Come cercare nel computer con le nuove funzionalità di Windows Vista

Linguaggi Regolari e Linguaggi Liberi

Transcript:

Ingegneria degli Algoritmi (II parte pratica) Correzione prova pratica Ing. Domenico Spera domenico.spera@students.uniroma2.eu

Premessa Sono stati richiesti i seguenti task: Implementare la versione in-order di DFS Implementare la versione post-order di DFS Testare gli algoritmi implementati (facoltativo) fantasia e creatività

Esempio di non-test Penso ad un albero che possa essere verificato a mano: Altezza pari ad 1 sarebbe banale! Quindi uso altezza parti a 2... Uso il mio nome: Andrea (POCHE LETTERE!) Eseguo DFS sull'albero

Test creativo Cosa succede se uso un albero vuoto? Cosa succede se l'albero ha altezza > 2? Cosa succede ad un albero totalmente sbilanciato a sinistra/destra? E se aggiungo qualche altro nodo? Cosa succede se creo 1000 alberi random ed eseguo DFS? E chi me li controlla?? creo un algoritmo ricorsivo con 4 righe di codice, mi confronto con un collega, cerco una variante su google...

Test creativo Cosa succede se uso un albero vuoto? Cosa succede se l'albero ha altezza > 2? Cosa succede ad un albero totalmente sbilanciato a sinistra/destra? E se aggiungo qualche altro nodo? Cosa succede se creo 1000 alberi random ed eseguo DFS? Ok, ho capito tutto.. ora creo 2 alberi simpatici di buonanno e auguriperlefeste!

Errori ricorrenti Nessun controllo sull'albero vuoto Implementazione della sola versione ricorsiva La struttura dell'albero viene modificata: Inserito un flag visited Nodi visitati vengono tagliati via Sottoalberi vengono tagliati/spostati La radice viene modificata Algoritmi non corretti (infinite loop..) Nonostante ciò qualcuno ha trovato il modo di ripristinare l'albero originario..

Cosa non voglio vedere..

ZERO COMMENTI!

TROPPI COMMENTI!

TROPPI COMMENTI! (ma ottimo codice..)

TROPPI COMMENTI E PURE IN MAIUSCOLO!

Nomi di variabile che non voglio vedere...

Nomi di variabile che non voglio vedere... NEWNODE1 in maiusolo solo costanti! list indica una collezione particolare in python! nomi buffi ok nei test, MAI nel codice singoli caratteri da usare solo nei seguenti casi: i, j, k se sono indici da scorrere convenzioni sui tipi (e.g. s per string, i per integer, d per decimal, etc..)

Cose strane in output..

Ingegneria degli Algoritmi (II parte pratica) Lezione 11 Ing. Domenico Spera domenico.spera@students.uniroma2.eu

Sommario Advanced Python (parte 2) Metaclassi Classi astratte Metodo str ( ) Grafi Liste di incidenza Liste di adiacenza Matrice di adiacenza

Advanced Python (parte 2)

Premessa Anche le classi sono istanze... di un particolare oggetto chiamato metaclasse

Metaclassi Ogni classe è istanza della metaclasse di default type E' possibile creare nuove metaclassi Le metaclassi offrono grande flessibilità nella gestione del ciclo di vita di un oggetto (creazione, inizializzazione, etc..) Ma, per il momento, quello che vi basta sapere è che esistono le metaclassi!

Classi astratte

Classi astratte Permettono di dichiarare il comportamento della classe senza doverne implementare obbligatoriamente i metodi Permettono di dichiarare una classe base estendibile/ereditabile da altre (e.g. Graph sarà ereditata da GraphIncidenceList, GraphAdjacencyList, etc)

Classi astratte in Python Utilizzare il modulo abc (Abstract base classes) La classe deve essere una istanza della metaclasse ABCMeta I metodi non implementati devono essere segnati come metodi astratti tramite decorator @abstractmethod E' molto più semplice di quello che sembra...

Classi astratte in Python from abc import ABCMeta, abstractmethod class Graph(metaclass=ABCMeta): @abstractmethod def insertnode(self, elem):... TUTTO QUI!

Stampare in output un oggetto

Stampare in output un oggetto def main( ): myobject = Edge(5, 4, 2.1) print(myobject) Cosa stampa l'interprete Python?

Stampare in output un oggetto def main( ): myobject = Edge(5, 4, 2.1) print(myobject) < main.edge object at 0x7f21a382d588> Questa è la posizione dell'oggetto in memoria!

Stampare in output un oggetto metodo str (self) Richiamato da str(object) e dalle funzioni format( ) e print( ) Deve tornare un oggetto di tipo string La documentazione ufficiale riporta [...] to compute the informal or nicely printable string representation of an object.

Stampare in output un oggetto Nodo: indice elemento colore def str (self): return '(' + str(self.indice) + ', ' + str(self.elemento) + ', ' + str(self.elemento) + ')'

Stampare in output un oggetto def main( ): myobject = Nodo(5, 4, 'rosso') print(myobject) (5, 4, rosso)

Grafi e visite di grafi

Esercizio 1 Aggiungere alla classe Edge del file elements.py il metodo str ( self) per stampare in output il contenuto di un arco, ovvero indici dei vertici e peso dell'arco.

Esercizio 2 Modificare il metodo genericsearch( ) nel file Graph_IncidenceList.py. Dove trovate il tag [TODO: aggiorna il padre] fare in modo che per ogni nodo incontrato già marcato venga aggiornato il padre del relativo nodo nell'albero di output. HIT: utilizzare la variabile currnode che punta al rispettivo nodo dell'albero. HIT2: aggiornare il padre evitando di staccare un intero sottoalbero, ovvero scollegando il nodo corrente dall'albero per ricollegarlo ad un suo discendente.

Approfondimenti https://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/ https://docs.python.org/3.4/library/abc.html http://pythoncentral.io/what-is-the-difference-between- str -and- repr - in-python/