Informatica 3. Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Lezione 26 - Modulo 1. Introduzione. Esempio

Documenti analoghi
Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Modulo 1: Skip list Modulo 2: Multiliste Modulo 3: Rappresentazioni di matrici

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Introduzione Implementazione (1)

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Informatica 3. Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Lezione 21 - Modulo 1. Introduzione (1) Introduzione (2) Ricerca:

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà

POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Anno Accademico 2003/2004 I Prova in itinere - Laurea On Line SOLUZIONI

Liste concatenate. Violetta Lonati

Una breve introduzione all implementazione in C di algoritmi su grafo

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

Lezione 6: 12 Novembre 2013

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Problema del cammino minimo

Strutture dati Alberi binari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Alberi ed Alberi Binari di Ricerca

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Algoritmi e Strutture Dati. Lezione 5

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Alberi Binari Alberi Binari

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Strutture dati per insiemi disgiunti

INFORMATICA 3 Prof.ssa Sara Comai

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Fondamenti di Informatica II

Esercizio 1 (6 punti)

Problemi di ordinamento

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Algoritmi e Strutture Dati. Lezione 3

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Laboratorio di Informatica

Strutture dati. Le liste

Lezione 8 Struct e qsort

Inserimento in una lista ordinata

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

La struttura dati CODA

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

I B+ Alberi. Sommario

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Prima prova in itinere di Informatica 3 IOL Prof.ssa Sara Comai A.A dicembre 2004

Implementazione di dizionari

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

IL CONCETTO DI LISTA!

Alberi binari di ricerca

Esercitazione 6 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Algoritmi e Strutture di Dati A.A Esempio di prova scritta del 19 gennaio 2018 D.M CFU Libri e appunti chiusi Tempo = 2:00h

Memorizzazione di una relazione

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Un heap binario è un albero binario con le seguenti caratteristiche:

Implementazione dell albero binario in linguaggio C++

FONDAMENTI DI INFORMATICA

cons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una

Alberi binari e alberi binari di ricerca

TABELLE AD INDIRIZZAMENTO DIRETTO

Introduzione ai Grafi: Implementazione e operazioni di base

Lezione 8 Liste. Rossano Venturini. Pagina web del corso.

Handle di Funzioni Università degli Studi di Milano

Lezione 10 Liste. Rossano Venturini. Pagina web del corso.

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

ALGORITMI E STRUTTURE DATI

PROGRAMMAZIONE 2 15bisbis. OCaML: un veloce ripasso

Organizzazione Fisica dei Dati (Parte II)

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p

Lezione 12 Tabelle Hash

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Per semplicità eliminiamo le ripetizioni nell'albero.

IMPLEMENTAZIONE CONCATENATE DELLE LISTE

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Sistemi operativi A, Unix+C, 26/09/2017. Nome: Cognome: Matricola:

Alberi binari di ricerca

Fondamenti di Informatica 2

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Programmazione Procedurale in Linguaggio C++

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR

Fondamenti di Informatica

/* programma per costruire una partizione del grafo in foreste disgiunte */ #include <stdio.h> #include <stdlib.h>

Liste. Università degli Studi di Milano

Alberi e alberi binari I Un albero è un caso particolare di grafo

Heap e Code di Priorità

Le liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

Scritto di Algoritmi e s.d. (1o anno) 14 Luglio 2004 TESTO e RISPOSTE (in fondo)

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Transcript:

Informatica 3 Informatica 3 LEZIONE 6: Implementazioni avanzate per liste e array Lezione 6 - Modulo Modulo : Skip list Modulo : Multiliste Modulo 3: Rappresentazioni di matrici Skip list Politecnico di Milano - Prof. Sara Comai Politecnico di Milano - Prof. Sara Comai Introduzione Skip list: struttura dati probabilistica basata su liste in alternativa a BST e strutture ad albero (richiedono bilanciamento) semplice da implementare fornisce buone prestazione con alta probabilità Politecnico di Milano - Prof. Sara Comai 3 Esempio 5 5 3 3 4 58 6 69 5 5 3 3 4 58 6 69 5 5 3 3 4 58 6 69 Politecnico di Milano - Prof. Sara Comai 4

Skip list () Ricerca di un elemento: si segue il puntatore di livello più alto L fino a quando si trova un valore più grande di quello cercato dal nodo dello stesso livello immediatamente precedente si prosegue la ricerca al livello L- e si ripete il processo Esempio: ricerca del numero 6 5 5 3 3 4 58 6 69 Caso peggiore: Θ(log n) Politecnico di Milano - Prof. Sara Comai 5 Skip list () Ricerca di un elemento: si segue il puntatore di livello più alto L fino a quando si trova un valore più grande di quello cercato dal nodo dello stesso livello immediatamente precedente si prosegue la ricerca al livello L- e si ripete il processo Esempio: ricerca del numero 6 5 5 3 3 4 58 6 69 Caso peggiore: Θ(log n) Politecnico di Milano - Prof. Sara Comai 6 Skip list () Skip list ideale: metà dei nodi hanno un puntatore ¼ dei nodi hanno due puntatori /8 dei nodi hanno 3 puntatori... Distanze hanno gli stessi spazi bilanciamento Inserimento di un nuovo nodo Il processo per mantenere la skip list bilanciata è costoso quando si inserisce un nuovo nodo si assegna in modo random il livello al nodo con una distribuzione esponenziale 3 5% il nodo ha un puntatore 3 5% il nodo ha due puntatori... Politecnico di Milano - Prof. Sara Comai 7 Politecnico di Milano - Prof. Sara Comai 8 5 5 5 3

Prestazioni Implementazione () Se molti nodi hanno molti puntatori: Θ(n) Se molti nodi hanno pochi puntatori: equivalente a una lista concatenata Θ(n) Nel caso medio tutte le operazioni: Θ(log n) in pratica la skip list è probabile che abbia prestazioni migliori di un BST un BST può avere prestazione peggiori a seconda dell ordine con cui i dati vengono inseriti nell albero la skip list non dipende dall ordine con cui i dati vengono inseriti all aumentare del numero dei nodi nella skip list, la probabilità di ottenere il caso peggiore decresce esponenzialmente Politecnico di Milano - Prof. Sara Comai 9 Ricerca di un valore: forward: array che contiene i puntatori dei diversi livelli della skip list template <class Key, class Elem> bool SkipList<Key, Elem>:: find(const Key& K, Elem& e) const { SkipNode<Elem> *x = ; // Dummy er node for (int i=level; i>=; i--) while ((x->forward[i]!= NULL) && (K > x->forward[i]->value)) x = x->forward[i]; x = x->forward[]; // Move to actual record, if it exists if ((x!= NULL) && (K == x->value)) { e = x->value; return true; else return false; Politecnico di Milano - Prof. Sara Comai Implementazione () Determinazione del livello in base alla distribuzione esponenziale: int randomlevel(void) { int level; for (level=; Random() == ; level++); // Do nothing return level; (5%) (5%) (5%) -->5% (5%) -->5% livello livello Politecnico di Milano - Prof. Sara Comai Implementazione (3) Inserimento di un nuovo nodo template <class Key, class Elem> bool SkipList<Key, Elem>:: insert(const Elem& val) { int i; SkipNode<Elem> *x = ; // Start at er node int newlevel = randomlevel(); // Select level for new node if (newlevel > level) { // New node is deepest in list AdjustHead(newLevel); // Add null pointers to er level = newlevel; SkipNode<Elem>* update[level+]; // Track ends of levels for(i=level; i>=; i--) { // Search for insert position while((x->forward[i]!= NULL) && (x->forward[i]->value < val)) x = x->forward[i]; update[i] = x; // Keep track of end at level i Politecnico di Milano - Prof. Sara Comai

Implementazione (3) Informatica 3 Inserimento di un nuovo nodo (cont.)... x = new SkipNode<Elem>(val, newlevel); // Create new node for (i=; i<=newlevel; i++) { // Splice into list x->forward[i] = update[i]->forward[i]; // Where x points update[i]->forward[i] = x; // Where y points reccount++; return true; Lezione 6 - Modulo Multiliste Politecnico di Milano - Prof. Sara Comai 3 Politecnico di Milano - Prof. Sara Comai 4 Introduzione Lista pura Estensione della definizione di lista: multilista gli elementi di una multilista possono essere un atomo una lista: SOTTO-LISTA Lista pura: struttura a lista il cui grafo corrisponde a un albero esiste un unico percorso per ogni nodo nessun oggetto può apparire più di una volta nella lista Notazione: (x, (y, (a, a), y3), (z, z), x4) sotto-lista sotto-lista sotto-lista x y y3 z z x4 a a Politecnico di Milano - Prof. Sara Comai 5 Politecnico di Milano - Prof. Sara Comai 6

Lista rientrante () Lista rientrante: struttura a lista il cui grafo corrisponde a un DAG i nodi possono essere raggiunti dalla radice tramite più percorsi gli oggetti possono apparire più di una volta nella lista Lista rientrante () Notazione con sottoliste etichettate: (((a,b)),((a,b),c),(c,d,e),(e)) ((L:(a,b)),(L,L:c),(L,d,L3:e),(L3)) a L L L3 c d e b (((a,b)),((a,b),c),(c,d,e),(e)) a L b L c d L3 e Politecnico di Milano - Prof. Sara Comai 7 Politecnico di Milano - Prof. Sara Comai 8 Lista rientrante () Implementazione tramite array Lista ciclica: L L a b L3 c d L4 Implementazione tramite array: le sottoliste possono essere viste come elementi di lunghezza variabile occorre indicare l inizio e la fine di una sottolista implementazione ad albero sequenziale (L: (L: (a, L)), (L, L3: b), (L3, c, d), L4: (L4)) l accesso all n-esimo elemento richiede una visita sequenziale della lista Politecnico di Milano - Prof. Sara Comai 9 Politecnico di Milano - Prof. Sara Comai

Implementazione tramite liste concatenate () Le liste pure possono essere implementate tramite liste concatenate con un campo addizionale che indica se il nodo è un atomo o una sottolista in caso di sottolista il campo dei dati punta al primo elemento di una sottolista Implementazione tramite liste concatenate () Altro approccio: Tutti gli elementi della lista hanno due puntatori, eccetto gli atomi gli atomi contengono solamente i dati + x - - + x4 root + z + z + + y B C D - a Politecnico di Milano - Prof. Sara Comai A Politecnico di Milano - Prof. Sara Comai Informatica 3 Introduzione Lezione 6 - Modulo 3 Rappresentazioni di matrici Molte applicazioni devono rappresentare grandi matrici bidimensionali in cui molti elementi hanno valore Esempi: matrici triangolari matrici sparse Risparmiare spazio utilizzando delle liste che contengono i valori diversi da Politecnico di Milano - Prof. Sara Comai 3 Politecnico di Milano - Prof. Sara Comai 4

Matrice triangolare a a a a a 3 a a a a a 3 a a a a a 3 a 3 a 3 a 3 a 33 a 33 Lista di lunghezza n(n+)/ caso matrice triangolare inferiore: riga : primo elemento diverso da riga : primi due elementi diversi da la riga r è preceduta da r righe contenenti FORMULA elementi diversi da aggiungendo c si raggiunge la c-esima posizione della riga matrice[r,c] = lista[(r + r)/ + c] caso matrice triangolare superiore: matrice[r,c] = lista[rn - (r + r)/ + c] Politecnico di Milano - Prof. Sara Comai 5 Matrice sparsa () Metodo : concatenare le coordinate r e c degli elementi con valore diverso da in un unico valore e utilizzare questo valore come chiave in una tabella di hash occorre conoscere la posizione dei valori da cercare non si può trovare il primo elemento diverso da in una determinata riga/colonna Politecnico di Milano - Prof. Sara Comai 6 Matrice sparsa () Matrice sparsa (3) Metodo : implementazione tramite una lista ortogonale lista di puntatori a righe liste di record della matrice lista di puntatori a colonne liste di record della matrice ogni elementi diverso da punta ai vicini diversi da che lo precedono e gli succedono sia nella riga che nella colonna colonne righe 3 6 A A A 6 A A 3 4 A 4 7 A 7 A76 Politecnico di Milano - Prof. Sara Comai 7 Politecnico di Milano - Prof. Sara Comai 8

Matrice sparsa (4) Prestazioni in termini di spazio: se i dati, gli indici di riga e colonna e il puntatore richiedono 4 byte, una matrice nxm richiede 4nm byte se la matrice sparsa richiede 8 byte per 4 puntatori, due indici di array e un valore, una matrice nxm con X% valori diversi da richiede 8nmX byte 8mnX = 4mn X = /7 4% Politecnico di Milano - Prof. Sara Comai 9