Algoritmi-riassunto

download Algoritmi-riassunto

of 98

Transcript of Algoritmi-riassunto

  • 8/16/2019 Algoritmi-riassunto

    1/98

    Capitolo 1 – Introduzione

    • Alcuni problemi sono irrisolvibili

    Alcuni vengono risolti solo in modo approssimato

    • Soluzioni ottime: non ce ne sono di più efficienti

    • Semplicità, modularità, manuntenibilità, espandibilità, sicurezza, robustezza

    • Invariante: condizione sempre vera in un certo punto del programma

    o Di ciclo: all’inizio del ciclo (subito dopo il for)

    o Di classe: alla fine dell’esecuzione di un metodo

    Dimosterazione correttezza

    o aso base: vera all’inizio

    o !asso induttivo: se la condizione " vera all’inizio di un’iterazione, lo "

    anc#e alla successiva (ad esempio: min conterrà il minimo degli

    elementi tra $ e i%&)

    o onclusione: alla fine min conterrà il minimo tra $ e n%&

    • 'isorse da poter valutare:

    o  empo

    o Spazio (memoria)

    o anda (algoritmi distribuiti)

  • 8/16/2019 Algoritmi-riassunto

    2/98

    ANALISI DI ALGORITMI

    Dimensione dell’input

    Criterio di costo logaritmico: la taglia dell'input è il numero di bit necessari perrappresentarlo .sempio! moltiplica"ione di numeri binari lung#i n bit

    Criterio di costo uniforme: la taglia dell'input è il numero di elementi c#e locostituiscono. sempio! ricerca minimo in un arra$ di n elementi

    In molti casi: possiamo assumere c#e gli %elementi& siano rappresentati da unnumero  costante di bit. Le due misure coincidono a meno di una costantemoltiplicatia

    Modello di calcolo: rappresentazione astratta di uncalcolatore

    Astrazione: dee sempli(icare i dettagli) altrimenti è inutile

    Realismo: dee ri(lettere la situa"ione reale

    Potenza: dee permettere di trarre conclusioni (ormali sul costo

    Binary search

    *un"iona solo su ettori ordinati. +omplessit,!O-log n

  • 8/16/2019 Algoritmi-riassunto

    3/98

    aratsu!a

    Sere per moltiplicare due binari con diide et impera

    +omplessit,! O-n

    /.01

    "election sort

    Ordina un ettore mettendo il minimo all2ini"io ogni olta +omplessit,!O-n3

  • 8/16/2019 Algoritmi-riassunto

    4/98

    Merge sort

    Ordinare un ettore con diide et impera +omplessit,!O-nlog-n

    Analisi ammortizzata

    +i sono tre metodi per (are l2analisi ammorti""ata!

    Metodo dell’aggregazione:

    • Si calcola la complessit, O-(-n per eseguire opera"ioni in se4uen"a nelcaso pessimo

    • Il costo ammorti""ato di una singola opera"ione è O-(-n5n

    Metodo degli accantonamenti #consigliato$:

  • 8/16/2019 Algoritmi-riassunto

    5/98

    • Alle opera"ioni engono assegnati costi ammorti""ati c#e possono esseremaggiori 5minori del loro costo e((ettio

    • 6roare c#e la somma dei costi ammorti""ati è un limite superiore al costoe((ettio

    Metodo del potenziale #ignorato$

    Counting sort

    7asato non sui con(ronti) dipende dal range -8 dei numeri+omplessit,! O-n98

  • 8/16/2019 Algoritmi-riassunto

    6/98

    Capitolo 3 – Strutture

    • Specifica, implementazione

     Tipi:

    o Lineari (presenza di una sequenza) / non lineari

    o Statiche / dinamiche

    o Omogenee / disomogenee

    • Sequenze

    o Dinamica e lineare

    o

    Conta lordine

    o !mmette duplicati

    o !ccesso diretto a primo/ultimo

    o !ccesso sequenziale a tutti gli altri elementi

    o ! pagina " degli appunti guella, linterfaccia # incompleta$ La %ersione

    completa # a pagina & (con implementazione)

    • Set

    o Dati chia%e (unici)

    o Dati satellite

    • Dizionari

    • 'mplementazioni

    o Dizionario: hashtale, alero

    o !lero: alero con puntatori, %ettore dei padri

    o Sequenza: lined lista, arra*

  • 8/16/2019 Algoritmi-riassunto

    7/98

    STRUTTURE ELEMENTARI

    Lista circolare, bidirezionale, con sentinella

    È possibile realizzare le liste con i vettori, bisogna gestire però il problema delladimensione dinamica, meglio gestirla come a !ava nell"arra# list, incrementa ognivolta del doppio e dimezza $%ando l"occ%pazione & pari ad %n $%arto'

  • 8/16/2019 Algoritmi-riassunto

    8/98

    Stack 

    (%nziona come i piatti in pizzeria, LI()

    Queue

  • 8/16/2019 Algoritmi-riassunto

    9/98

    (I()

  • 8/16/2019 Algoritmi-riassunto

    10/98

    Capitolo 5 – Alberi

    • Profondità/livello: distanza dalla radice (0 per la radice)

    Livello: nodi della stessa profondità

    • Altezza: massima profondità

    • Visita

    o In profondità, a seconda di quando si processa il nodo rispetto ai fili:

    Pre!order

    In!order (a"#"a" invisita, simmetrico)

    Post!order

    o In ampiezza (con la coda dei nodi da visitare)

    • Implementazioni

    o Vettore dei fili ($parent, node $c%ild&odes')

    preca spazio per i nodi con poc%i fili

    o Lin#ed list dei fili ($parent, $first*%ild, $ne+tilin)

    o Vettore dei padri

    struct -int parentInde+, Item value.'I1

    o Aleri inar2

     3ree ri%t(), 3ree left()

    • 4rdinamento asato sui confronti:

    o equenza di confronti rappresentaile come alero inario

    o 5olie: soluzioni del prolema, nodi interni: confronti

    o &umero di possiili solizioni: n6

    o Altezza minima dell7alero: lo n6 8 n/9 lo n/9

    o Per cui oni aloritmo di ordinamento (asato sui confronti) ;(n lon)

  • 8/16/2019 Algoritmi-riassunto

    11/98

  • 8/16/2019 Algoritmi-riassunto

    12/98

    ALBERI BINARI DI RICERCA

    Alberi binari in cui il figlio sinistro è più piccolo del padre, il figlio destro più grandedel padre

    Alberi binari di ricerca

    Ricerca: implementazione

    Cerca un valore nell’albero Coplessit!"

    #$logn%

  • 8/16/2019 Algoritmi-riassunto

    13/98

    Ricerca del minimo e del massimo

    Coplessit!"#$logn%

  • 8/16/2019 Algoritmi-riassunto

    14/98

    Successore-predecessore

    Successore: di un nodo è il più piccolo nodo aggiore di &uel nodo

    Inserimento

    Nel caso pessio dobbiao scorrere tutto l’alte''a dell’alberoCoplessit!" #$logn%

  • 8/16/2019 Algoritmi-riassunto

    15/98

  • 8/16/2019 Algoritmi-riassunto

    16/98

    Cancellazione

    Bisogna se in caso odificare l’albero perc() rianga un ABR

    Bilanciamento degli alberi*pesso le opera'ioni $ricerca, cancella'ione ecc% sugli ABR dipendono dall’alte''adell’albero+ Conviene &uindi cercare di tenere l’albero il più possibile bilanciato" c(enon vi sia troppa dise&uit! di profondit! fra sottoalbero destro e sottoalbero sinistro+er fare &uesto dobbiao fare ogni tanto delle rota'ioni+

  • 8/16/2019 Algoritmi-riassunto

    17/98

    Alberi Red-Black “Treee”

    *ono ipleentati per prevedere la bilanciatura dell’albero+ #gni nodo pu- essererosso o nero, le foglie non contengono valori, sono nodi nil $ in trealt! ne esiste solouno, tutti puntano a &uello, per rispariare eoria%+ La radice è nera, tutte lefoglie sono nere, i figli di un nodo rosso sono abedue neri+

    In pratica root e foglie sono neri, non posso avere due rossi consecutivi+ Il pat( diogni foglia contiene lo stesso nuero di nodi neri+

    Altezza nera: il nuero di nodi neri lungo ogni percorso da un nodo v $escluso% aduna foglia $inclusa%+ *i indica con b$v%

    Altezza nera di un albero: è l’alte''a nera della radice

  • 8/16/2019 Algoritmi-riassunto

    18/98

    RB-Tree rotazione a sinistra

    RB-Tree inserimento nodo

    Coe negli ABR, poi si sistea il tutto Coplessit!"#$log n%

  • 8/16/2019 Algoritmi-riassunto

    19/98

  • 8/16/2019 Algoritmi-riassunto

    20/98

    RB-Tree cancellazione

    .un'iona coe negli ABR, solo c(e poi dobbiao decidere se aggiustare o no, sideve aggiustare solo &uando il nodo cancellato è nero"

    Se il nodo cancellato è rosso:

    l’alte''a nera riane invariata• non sono stati creati nodi rossi consecutivi

    • la radice resta nera

    Se il nodo cancellato è nero:

    • la radice pu- essere un nodo rosso

    • se il padre e uno dei figli del nodo erano rossi ci troviao con due rossi di fila

    • cabia l’alte''a nera

    Complessit: !isitiamo "#log n$ nodi ognuno in tempo "#%$& 'uindi "#log n$

  • 8/16/2019 Algoritmi-riassunto

    21/98

  • 8/16/2019 Algoritmi-riassunto

    22/98

    Capitolo 7 – Hashing• Dizionario: insieme dinamico con coppie chiave, valore (chiave unica)

    • Se il numero di possibili chiavi è molto maggiore di quelle che verranno

    effettivamente memorizzate, occorre un’hashtable, altrimenti si può usare

    l’indirizzamento diretto

    • (!) è una funzione che tritura la chiave ! (sempre allo stesso modo però) e

    restituisce un valore dal range molto pi" limitato di !# $i possono essere

    quindi delle collisioni#

    •  %utti i valori con lo stesso hash sono memorizzati nello stesso slot di un arra&

    • 'ccorre minimizzare il numero di collisioni, e sapere gestire quelle che si

    verificano

    • Sarebbe necessario conoscere la distribuzione di probabilit di !, ma nella

    realt non si usa questo metodo#

    • unzioni di hash

    o *strazione: si estraggono degli specifici bit dal valore

    o +': si -orano varie estrazioni di specifici bit

    o Divisione: ! mod m, dove m è dispari, meglio se primo

    o .oltiplicazione: (!) / floor(m 0 (!$ 1 floor(!$))), dove $ è una

    costante tra 2 e 3, e m un numero qualunque (potenze di 4 consigliate)

    (questo metodo non è poi cos5 buono)

    • 6valanche effect: un singolo bit della chiave modificato deve cambiare

    almeno met dell’hash

    • $ollisioni

  • 8/16/2019 Algoritmi-riassunto

    23/98

    o 7iste di trabocco: lin!ed list sugli slot con pi" di un elemento#

    8nserimento in testa, loo!up e delete richiedono la scansione della lista:

    9(3lunghezza.edia7ista;4)

    o 8ndirizzamento aperto: se uno slot è gi occupato, se ne cerca uno

    alternativo

    esimo elemento restituito da un generatore di num

    casuali da 2 a m>3

    • isulta una permutazione, ma rimane il secondar&

    clustering

    Doppio hashing: (!, i) / ((!) i0’(!)) mod m

    • ’(!) deve essere relativamente primo con m

    o m / 4p, ’(!) deve restituire numeri dispari

    o m primo, ’(!) deve restituire numeri minori di m

    o $ancellazione: non si può mettere null, altrimenti le scansioni

    successive si fermerebbero# 'ccorre uno speciale valore deleted

    • $omplessit

    o n chiavi, m slot

    o n?m, ovvero fattore di carico @ ? 3

    o 8(@): numero atteso di ispezioni in caso di insuccesso

    o S(@): numero atteso di ispezioni in caso di successo

  • 8/16/2019 Algoritmi-riassunto

    24/98

    • Auando @ cresce troppo, si raddoppia la dimensione della tabella

    (tipicamente 2#B)

    • $osto ammortizzato costante

    • =roblemi hashtable:

    o Scarsa localit& reference (cache miss)

    o

  • 8/16/2019 Algoritmi-riassunto

    25/98

    INSIEMI E DIZIONARI

    Riepilogo complessità

    Insieme: collezione di oggetti

    Dizionario: insieme di associazioni chiave-valore

    Insiemi realizzati con vettori booleani

  • 8/16/2019 Algoritmi-riassunto

    26/98

    Vantaggi: notevolmente semplice, efficiente verificare se n elemento appartieneall!insieme

    Svantaggi:  occpazione di memoria O"N#, indipendente dalla dimensionedell!insieme, operazioni inefficienti O"N#

    Insiemi realizzati con liste non ordinateVantaggi:  occpazione di memoriaproporzionale alla dimensione del vettore

    Svantaggi: operazioni di ricerca, inserimento ecancellazione O"n#$ nione, intersezione edifferenza O"nm#

    Insiemi realizzati con liste ordinate

    Vantaggi: occpazione di memoriaproporzionale alla dimensione del vettore,operazioni di nione, intersezione e differenzaO"n#

    Svantaggi: operazione di ricerca, inserimentoe cancellazione% O"n#

    Insiemi realizzati con strutture dati complesse

    Con alberi di ricerca bilanciati:

    • Ricerca, inserimento, cancellazione% O"logn#

    • &iene mantento l!ordinamento• Elencare ttti gli elementi% O"n#

    Con tabelle hash:

    • Ricerca, inserimento, cancellazione% O"'#

    • &iene perso l!ordinamento

    • Elencare ttti gli elementi% O"m# dove m ( la dimensione della ta)ella hash

  • 8/16/2019 Algoritmi-riassunto

    27/98

  • 8/16/2019 Algoritmi-riassunto

    28/98

    Capitolo 9 – Grafi

    • Visite

    o

    Ampiezza (numero di Erdos)

    o Profondità (ordinamento topologico, component (fortemente)

    connesse)

    • Cammini minimi

    o Da singola sorgente

    o Fra tutte le coppie

    •  Tipi

    o Orientato non orientato (con le freccie singole o !idirezionale)

    o (u, ") incidente da u a " (u ##$ ")

    o " adiacente a u se u ##$ " (%ci si pu& arri"are direttamente da')

    • Definizioni

    o n V, mE

    o *rado (+uanti arci), grado entrante (+uanti entrano), grado uscente

    (+uanti escono)

    o Cammino (orientato), Catena (non orientato)- .emplice se non ci sono

    nodi doppi

    o Ciclo (orientato), Circuito (non orientato)- .emplice se non ci sono nodi

    doppi

    o Aciclico, Orientato aciclico DA*

    o Completo/ ciascuno direttamente collegato a ciascunaltro

    o Al!ero li!eroorientato, connesso, aciclico

    o Al!ero radicato/ se +ualce "ertice 0 detto radice

    o Al!ero di copertura

    o Erdos/ Erdos a Erdos 1, ci a scritto un articolo con lui 2, ci a

    scritto un articolo con uno di erdos 2 3 e cos4 "ia

  • 8/16/2019 Algoritmi-riassunto

    29/98

    o Vertici aperti/ "ertici i cui arci uscenti non sono ancora stati percorsi

    o Vertici ciusi/ "ertici di cui arci uscenti sono stati tutti percorsi

    o Componenti connesse/ si sa

    o Componenti fortemente connesse/ per i grafi orientati, significa ce sipu& andare a"anti e indietro

    o 5n sottografo 0 un sottoinsieme dei "ertici e un sottoinsieme dei lati

    o 5n sottografo 0 massimale se non si pu& allargare mantenendolo

    connesso

    • 6mplementazioni

    o 7atrice di adiacenza (cosa 0 collegato a cosa)

    .pazio/ O(n3)

    Verifica adiacenza/ O(2)

    Elenco di tutti gli arci/ O(n3)

    o 8iste di adiacenza

    .pazio/ O(n9m)

    Verifica adiacenza/ O(n)

    Elenco di tutti gli arci/ O(n9m)

    • Dept First .earc

    o :uando si scopre un nuo"o nodo ce prima non era marcato, +uesto

    "iene marcato e inserito nell;al!ero ricoprente (T)

    o *li arci restanti possono essere/

    All;indietro/ puntano ad un antenato (o padre)

    6n a"anti/ puntano ad un discendente (o figlio)

    Di attra"ersamento, negli altri casi

    • 5n grafo 0 ciclico<

    o 6 DA* non anno arci all;indietro, per cui +uando se ne tro"a uno si

    restituisce false-

  • 8/16/2019 Algoritmi-riassunto

    30/98

    • Ordinamento topologico/ 6n ce ordine fare le cose per eseguire tutti i tas=, ad

    esempio con ma=e (riciede un DA*)

    o .oluzione diretta/ tro"are un nodo senza arci incidenti, stamparlo e

    rimuo"ere- >ipetere per tutti gli altri

    o ?asata su DF.

    • .trongl@ Connected Components (scc)

    o Algoritmo di osaraBu, 2 (calcola il grafo trasposto)

  • 8/16/2019 Algoritmi-riassunto

    31/98

    HEAP MFSET

    Code con priorità

    Le operazioni base viste fin ora (cancellazione, inserimento ecc) possono nonbastare, certe volte dobbiamo inventarne di nuove Le code di priorit! sono unastruttura dati fatta apposta per essere efficiente a fare determinate operazioni "lio##etti sono estratti dalla cosa in base alla loro priorit!

    Albero binario perfetto

     Tutte le fo#lie $anno la stessa altezza, tutti, tranne le fo#lie $anno due fi#li Altezza% &uindi lo# n

    Albero binario completo Tutte le fo#lie $anno profondit! H o H' Tutti i nodi a livello H sono accatastati asinistra Tutti i nodi interni $anno #rado due, eccetto al pi uno

    Heap

    * un particolare tipo di coda di priorit! nella &uale i dati sono mantenuti in modoparzialmente ordinato

    Max heap: albero binario completo in cui la radice % sempre il ma##iore (anc$enei sottoalberi, il padre % sempre il ma##iore)

    Min heap: albero binario completo in cui la radice % sempre minore (anc$e neisottoalberi)

    "li $eap non impon#ono nessun ordinamento fra i fi#li di un nodo (ordinamentoparziale), l+importante % c$e i padre sia ma##iore o minore rispettivamente per ilma e per il min $eap

    • -#ni nodo % ma##iore o u#uale di se stesso

    • Se n ./m e m./n allora n/m

    • Se n./m e m./r allora n./r

    L+ordinamento parziale % utile per modellare #erarc$ie complesse o per mantenere

    informazioni parziali * pi semplice costruire uno $eap ordinato parzialmente c$e&ualcosa ordinato totalmente

    Array heap

    • A01 contiene la radice

    • p(i) / 0i231 (limite inferiore) Padre

  • 8/16/2019 Algoritmi-riassunto

    32/98

    • l(i) / 3i Fi#lio sinistro

    • r(i) / 3i4 Fi#lio destro

    Procedure per gestire uno heap

    Max heap restore

    Serve per mantenere la propriet! dei ma $eap dopo un inserimento 5omplessit!6-(lo#n)

    -#ni sottoalbero deve essere un ma $eap, &uindi si cerca di fare scendere fino al

    posto #iusto il valore

    Heap build

    Serve per costruire un ma $eap da zero (dato un vettore)5omplessit!6 -(nlo#n)

    Heapsort

  • 8/16/2019 Algoritmi-riassunto

    33/98

    -rdina sul posto un arra7 5omplessit!6 -(nlo#n)

    Coda con priorità

    8na struttura dati c$e serve a mantenere un insieme S di elementi , ciascuno con

    un valore associato di priorit!

  • 8/16/2019 Algoritmi-riassunto

    34/98

  • 8/16/2019 Algoritmi-riassunto

    35/98

    Riduzione priorità

    MF!"

    Servono a rappresentare de#li insiemi dis#iunti, le operazioni fondamentali sonounire pi insiemi, identificare l+insieme a cui appartiene un o##etto * una collezionedi insiemi dinamici dis#iunti (un insieme di insiemi) -#ni insieme % rappresentatoda un rappresentante univoco Le ricerc$e del rappresentate sullo stesso insiemedevono restituire sempre lo stesso o##etto Solo dopo un unione &uesto o##etto pu9cambiare Si pu9 sce#liere l+elemento pi piccolo2#rande di un insieme

  • 8/16/2019 Algoritmi-riassunto

    36/98

    Applicazione: tro#are le componenti connesse di un

    grafo

    Alla fine avremo l+insieme delle comonenti connesse 5omplessit!6-(n4m)

  • 8/16/2019 Algoritmi-riassunto

    37/98

    $mplementazione basata su liste

    • realizzazione basata su liste: find %&'( merge %&n(

    • realizzazione basata su alberi6 find -(n) mer#e -()

    conviene anc$e inserire l+euristica del peso (se liste) 2 ran#o (se alberi) e la

    compressione dei percorsi Euristica sul peso6 $o due liste, per unirle devo sce#liereuno dei due rappresentanti ed applicarlo all+altra lista, lo#icamente attacco la picorta alla pi lun#a, &uindi mi salvo anc$e la dimensione

    :el caso delle liste6 o#ni elemento contiene un puntatore al successivo, unpuntatore al rappresentante ed un o##etto

    Pu9 essere visto come un albero di altezza

    L+operazione find ric$iede -(), si restituisce il rappresentante di ;

    ui conviene applicare la compressione dei cammini6

  • 8/16/2019 Algoritmi-riassunto

    38/98

    >uando si cerca &ualcosa portiamo tutto in su 5os? le successive ricerc$ecosteranno -()6

  • 8/16/2019 Algoritmi-riassunto

    39/98

    Capitolo 11 – Cammini minimi grafi

    •  Tipi di problemi (non centra col resto del capitolo)

    o Decisionali: bool IsItTrueThatInputHasASpecificProperty()

    o Ricerca: IEnumerableSolution! "etPossibleSolutions()

    o #ttimi$$a$ione: Solution "et%estSolution()

    o Approssima$ione: Solution "et"oodEnou&hSolution()

    • 'a defini$ione matematica di un problema pu su&&erirci un metodo di

    risolu$ione

    •  Teorema di %ellman:

    o on i cammini minimi* o&ni arco (u* +) dell,albero ricoprente de+e

    a+ere:

    Distan$a da + - Distan$a da u . peso dell,arco u*+

    o Per o&ni arco del &rafo (intero sta+olta* non solo dell,albero ricoprente)

    'a distan$a calcolata da noi de+e essere minore o u&uale a

    /uella che si otterrebbe usando l,arco (u* +)

    • Al&oritmo di Di01stra (2343)

    o oda di priorit5 mediante +ettore 6 lista non ordinati

    o #(n7)

    o Pesi positi+i

  • 8/16/2019 Algoritmi-riassunto

    40/98

    • Al&oritmo di 8ohnson (2399)

    o oda di priorit5 mediante heap binario

    o #(m lo& n)

    o Pesi positi+i

    • Al&oritmo di redman;Tar0an (23

  • 8/16/2019 Algoritmi-riassunto

    41/98

    • Al&oritmo di %ellman;ord;=oore (234 D,Esopo (239?)

    o De@ueue

  • 8/16/2019 Algoritmi-riassunto

    42/98

    o "eneralmente* superpolinomiale

    o In pratica* +eloci per &rafi di reti stradali

  • 8/16/2019 Algoritmi-riassunto

    43/98

    DIVIDE ET IMPERA

    Divide: dividi il problema in sotto problemi più piccoli ed indipendenti

    Impera: risolvi i sotto problemi ricorsivamente

    Combina: unisci le soluzioni dei sottoproblemi

    Ordina un vettore sul posto, divide comlicato, nessun combina omplessit!:O"nlo#n$

    Parentesizzare (decidere quale motiplicazione dimatrice fare prima)

    %trassen O"n&'()$

  • 8/16/2019 Algoritmi-riassunto

    44/98

    *ino#rad O"n&,+($

  • 8/16/2019 Algoritmi-riassunto

    45/98

    Capitolo 13 – Programmazione dinamica• Divide-et-impera

    o

    Ricorsivao  Top-down

    o Vantaggioso quando i sottoproblemi sono indipendenti

    • Programmazione dinamica

    o Iterativa

    o Bottom-up

    Semplice spiegazione della differenza tra programmazione dinamicaiterativa!" e memoization#

    o $emoization# si c%iama ricorsivamente" alla fine della funzione ci sisalva il risultato in un arra& cac%e!" e all'inizio si controlla se il risultato( gi) stato calcolato* In tal caso" lo si restituisce subito*

    o Se l'arra& di cac%e %a dimensione +" significa c%e ci sono + possibiliinput per la funzione" quindi il corpo pesante della funzione verr)eseguito al massimo + volte*

    o Se ci si rende conto c%e tutti gli + slot della cac%e verranno riempiti"tanto vale calcolarli tutti" iterativamente" partendo dal caso base earrivando a quello c%e ci interessa* , questo punto si pu togliere lec%iamate ricorsive e sostituirle con un fiduciosocac%e.argomento/on/ui,vrei/%iamato0a1unzioneRicorsivamente2"visto c%e lo avremo sicuramente gi) calcolato a questo punto sisceglie un nuovo nome per la variabile cac%e!

    o ,ttenzione per# usando la versione iterativa si risc%ia di calcolareelementi c%e poi non ci serviranno" quindi tanto vale usarela ricorsionecon memoization" c%e ( anc%e molto pi3 naturale ed espressiva

    o Se il numero di possibili c%iavi ( troppo alto" si usa un'%as%table

    • Sottostruttura ottima

    o 4 una definizione ricorsiva della soluzione ottima" cio( le soluzioni deisottoproblemi

    • In c%e sequenza conviene moltiplicare delle matrici5

  • 8/16/2019 Algoritmi-riassunto

    46/98

    o 0'ordine non pu essere cambiato" ma i raggruppamenti s6*

    o Scegliamo dove spezzare la lista di matrici per effettuare ilraggruppamento" e proseguiamo ricorsivamente sulle sottoparti

    o  Teorema di parentetizzazione ottima# ogni soluzione ottima contiene altuo interno le parentizzazioni ottime dei sottoproblemi

    o 7n8!

    • 9aino .***2

    • 0ongest /ommon Subsequence

    o Subsequence# cio( c%e si ottiene rimuovendo un certo numero dielementi anc%e sparsi! da una sequenza

    o

    /ommon subsequence# una subsequence ottenibile da due sequenzediverse

    o 0ongest /ommon Subsequence# la pi3 lunga di queste

  • 8/16/2019 Algoritmi-riassunto

    47/98

    o /%e mal di testa

    o 0/S viene usato nel diff per confrontare file" vedendo quali rig%e sonostate aggiunte e quali tolte le modific%e vengono viste comeaggiunta:cancellazione!

    • String matc%ing approssimato

    o ;n'occorrenza

  • 8/16/2019 Algoritmi-riassunto

    48/98

    Capitolo 14 – Greedy• Cerchiamo una possibile scelta ingorda

    • Dimostriamo che la scelta ingorda porta alla soluzione ottima

    • Scriviamo un algoritmo ricorsivo o iterativo che effettua sempre la scelta

    ingorda

    *sottostruttura ottima: qualcuno me la rispieghi

    Teorema “Greedy choice”

    Sia S[i,j] un sottoproblema non vuoto, e m lattivit! di S[i,j] con il minor tempo di fine"

    allora:

    • m # compresa in qualche soluzione ottima di S[i,j]

    • $l sottoproblema S[i,m] # vuoto

     Conseguenze:

    •  %on # pi& necessario analizzare tutti i possibili valori di '

    o  (accio una scelta )ingorda, ma sicura: seleziono lattivit! m con il minor

    tempo di fine

    %on # pi& necessario analizzare due sottoproblemi:

    o  +limino tutte le attivit! che non sono compatibili con la scelta ingorda

    o  i resta solo un sottoproblema da risolvere: S[m,j]

    Insiemi indipendenti versione iterativa (greedy)

    Complessit!: -.n/ se ordinata, -.nlogn/ se disordinata

  • 8/16/2019 Algoritmi-riassunto

    49/98

    Per un uon greedy!

    •  0rasformare il problema di ottimizzazione in un problema di scelte successive

    • Dimostrare che tale scelta rispetta il )principio della scelta ingorda

    Dimostrare che la soluzione ottima del problema )residuo dopo la sceltaingorda pu1 essere unito a tale scelta

  • 8/16/2019 Algoritmi-riassunto

    50/98

    Tipici prolemi greedy (solu"ione sulle slide a parole# poso pseudocodice)

    • 2roblema del resto

    • 3lgoritmo di scheduling 4 Shortest 5ob (irst .algoritmo di oore/

    • 6aino:

    Complessit!: -.nlogn/ per l7ordinamento, -.n/ per la scelta dei valori

    Prolema della compressione!

    2roblema della compressione .codici di 8uffman, nessun codice # prefisso di altro

    codice/:

  • 8/16/2019 Algoritmi-riassunto

    51/98

    Teorema! 9output dellalgoritmo 8uffman per un dato file # un codice a prefisso

    ottimo

    $chema della dimostra"ione!

    • Sottostruttura ottima

    o Dato un problema sullalfabeto , # possibile costruire un sottoproblema

    con un alfabeto pi& piccolo

    • 2ropriet! della scelta greed;

    o Scegliere i due elementi con la frequenza pi& bassa conduce sempre ad

    una soluzione ottimale

     Sia• un alfabeto, f un arra; di frequenze•

  • 8/16/2019 Algoritmi-riassunto

    52/98

    • Scambiamo x con a: otteniamo T 

    • Scambiamo y con b: otteniamo T ?

    Dimostriamo che:

    • C.f,0 / = C.f, 0 / = C.f,0/

    a poich> 0 # ottimo, sappiamo anche che:

    • C.f,0/ = C.f,0 /

    @uindi 0 # anchesso ottimo

    *Sottostruttura ottima: qualcuno me la rispieghi

  • 8/16/2019 Algoritmi-riassunto

    53/98

    %lero di copertura di peso minimo

    Due algoritmi greed;: Arus'al e 2rim

    Per caratteri""are gli archi sicuri doiamo introdurre alcune de&ini"ioni!•  Bn taglio (S,V-S) di un grafo non orientato G=(V,E) # una partizione di V in due

    sottoinsiemi disgiunti• Bn arco [u,v] attraversa il taglio se u S e v V-S• Bn taglio rispetta un insieme di archi A se nessun arco di A attraversa il taglio• Bn arco che attraversa un taglio # leggero nel taglio se il suo peso # minimo fra

    i pesi degli archi che attraversano un taglio

    'a regola per riconoscere gli archi sicuri data dal seguente teorema!• Sia G=(V,E) un grafo non orientato e connesso• Sia w una funzione peso a valori reali definita su E•

    Sia A E contenuto in un qualche albero di copertura minimo per G• Sia (S,V-S) un qualunque taglio che rispetta A• Sia [u,v] un arco leggero che attraversa il taglioE

    %llora• l7arco [u,v] # sicuro per A

    Corollario!• Sia G=(V,E) un grafo non orientato e connesso• Sia w una funzione peso a valori reali definita su E• Sia A E contenuto in un qualche albero di copertura minimo per G• Sia una componente connessa .un albero/ nella foresta GA=(V,A)•

    Sia [u,v] un arco leggero che connette a qualche altra componente in GA%llora• l7arco [u,v] # sicuro per A

  • 8/16/2019 Algoritmi-riassunto

    54/98

  • 8/16/2019 Algoritmi-riassunto

    55/98

    Capitolo 15 – Ricerca locale

    ShellSort

    • Inversioni di una sequenza: numero di coppie nell’ordine sbagliato

    • Ordinamento: la permutazione che minimizza il numero di inversion

    • Vantaggi della InsertionSort (pochi passi quando è quasi ordinata)

    • Elimina gli svantaggi della InsertionSort (quello di spostare solo elementi

    adiacenti tra loro)

    • Invece di considerare elementi a distanza ! li considera prima a distanza

    "#$! poi $%&! '! &"! $! & e (esempio)

    • uando h ! è in pratica una insertion sort! questo garantisce la correttezza

    • *er n non troppo grandi! è migliore di altri algoritmi asintoticamente migliori

    • Ordinamento sul posto

  • 8/16/2019 Algoritmi-riassunto

    56/98

    • +a complessit, è piena di casi particolari

    Problemi di flusso

    • -ete di .lusso: (V!E!s!p!c)

    o /ra.o orientato /(V!E)

    o Vertice sorgente (s) e pozzo (p)

    o 0unzione di capacit, c: V1V 2 3

    • 0lusso: .unzione V1V2 4

    o .(u! v) 5.(v! u)

    o .(u! v) 6 c(u! v)

    o Sommatoria di tutti i .lussi uscenti da un certo nodo " (tranne per

    sorgente e pozzo)

    uesto per via dei .lussi all’incontrario

    • Valore di .lusso:

    o Sommatoria di tutti i .lussi tra tutti i nodi (in pratica! quanto passa visto

    che gli opposti si annullano)

    o Si vuole trovare il massimo . possibile

    • 7apacit, residua di un .lusso: .unzione che ci dice per ogni coppia di nodi!

    quanto avanzerebbe per quell’arco

  • 8/16/2019 Algoritmi-riassunto

    57/98

    • -ete residua: (V! Er! s! p! r) è come l’originale! solo che la capacit, è sostituita

    dalla capacit, residua e gli archi sono tutte le coppie per cui rimane una

    capacit, residua

    • 0lusso nullo: .lusso che restituisce " per ogni u! v

    • 7ammino aumentante per .: cammino da sorgente a pozzo in -

    • 7apacit, del cammino: è la pi8 piccola tra quelle degli archi del cammino

    • 0lusso aumentante: (99)

    • etodo delle reti residue

    o Il .lusso corrente viene inizializzato a .lusso nullo

    o Si ripetono i seguenti passaggi .inch; g < ."

    7alcola la rete residua! sostituendo la capacit, originale con

    quella residua

    Si cerca un .lusso aumentante g per -

    . = g

  • 8/16/2019 Algoritmi-riassunto

    58/98

    •  >aglio: suddivisione in due dei nodi in modo che sorgente e pozzo rimangano

    separati

    • 7apacit, del taglio: la somma! per ogni coppia di nodi tra parte e parte '!

    delle capacit,

    •  >aglio minimo: taglio con capacit, minima

    • Il .lusso che attraversa un taglio è la somma! per ogni coppia di nodi tra parte

    e parte '! dei .lussi

    • Il valore di un .lusso che attraversa un qualsiasi taglio è uguale a quello degli

    altri

    •  >eorema .lusso massimo ? taglio minimo: dimostrazioni equivalenti:

    o . è un .lusso massimo

    o 3on esistono cammini aumentanti per . 

    o Esiste un taglio (S!*) tale che@.@ c(S! *)

    • Varianti

    o 0ord50ulAerson (qualunque algoritmo di visita) O(@.B@ (m=n) )

    o Edmonds5Carp (visite in ampiezza) O(nm')

  • 8/16/2019 Algoritmi-riassunto

    59/98

    o Dlgoritmo dei tre indiani O(n$)

  • 8/16/2019 Algoritmi-riassunto

    60/98

    Capitolo 16 – Backtrack 

    •  Tipi di problem

    o IEnumerable GetPossibleSolutions()

    o Solution GetFirstSolution()

    o int CountPossibleSolutions()

    • Algoritmo di Grahm (Inviluppo onvesso ! disegnare un poligono onvesso

    attorno a dei punti" pi# piolo possibile) ! $(n log n)

    o Il punto on ordinata minima %a parte dell&inviluppo onvesso

    • Fai 'ualosa e dis%alo se non orretto

    Pruning lasiar perdere le solu*ioni par*iali he non porteranno a niente

    • (+ regine" solite ose del %il*)

    • Per le regine" la tenia migliore invee una minimum,on%lits heuristi si

    muove il pe**o on il maggior numero di on%litti nella asella della stessa

    olonna on minor numero di on%litti- +on per. garantita la termina*ione

    sempre orretta

    • Giro di avallo andare ni giro ol avallo su una sahiera %ino a rioprire

    tutte le elle esattamente una volta

    o S/0/0 ontiene il numero di passo in ui entro in una ella (12non

    anora)

    • Sudo3u" Giri di avallo appunti guella

  • 8/16/2019 Algoritmi-riassunto

    61/98

    Capitolo 17 – algoritmi probabilisticiIl calcolo delle probabilità è applicato non ai dati di input, ma ai dati di outputDue possibilità:

    • Algoritmi corretti, il cui tempo di funzionamento è probabilistico•

    Algoritmo la cui correttezza è probabilistica

    Espressione polinomiale nulla

    Data un’espressione polinomiale in n variabile, dire se è nulla o no. Non ci sono

    monomi. Gli algoritmi basati su semplificazioni sono molto complessi.

    • i genera una n!pla di valori v1, ..., vn• i calcola "# p(v1 , ... , vn)

    o e x $ %, p non è identicamente nulloo e x # %, p potrebbe essere identicamente nullo

    • e vi # random&', (d), dove d è il grado massimo del polinomio, allora laprobabilità di errore non supera '*(.

    • i ripete k volte, riducendo la probabilità di errore a &'*()k 

    StatisticaAlgoritmi statistici sui vettori: estraggono da un vettore numerico alcune

    caratteristic+e statistic+e rilevanti &media, varianza, moda, mediano).

    Selezione: dato un arra di valori distinti ed un valore - compreso nel range del

    vettore, trovare l’elemento c+e è maggiore di esattamente !' elementi.

    /icerca del minimo, massimo:• T &n) # n!' # 0&n) confronti

    1ossiamo dimostrare c+e 2uesto algoritmo è ottimale3 Idea:• scelta del minimo come un 4torneo5•  6utti gli elementi &tranne il vincitore) deve perdere almeno un 4partita5• 7uindi il problema è 8&n)

     6rovare il secondo minimo dell’arra

  • 8/16/2019 Algoritmi-riassunto

    62/98

    9albero del torneo permette di trovare il secondo minimo in ;&n < log n) confronti nelcaso pessimo:

    • n passi necessari per la ricerca del minimo• iano = e il minimo e il secondo minimo• icuramente cè stato un 4incontro5 fra = e , dove = +a 4vinto5•

    e cos> non fosse, esisterebbe un valore ?@ c+e +a 4battuto5 assurdo dalladefinizione di 7uindi, basta cercare nei log n valori 4battuti5 direttamente da = per trovare ilsecondo minimo. 6otale: ;&n < log n)

    9’albero del torneo puB essere simulato da uno +eap:

    Non va bene se C# n*(. 7uesto va meglio:

    eguono cenni a cose complicate.

  • 8/16/2019 Algoritmi-riassunto

    63/98

    Capitolo 18 – Teoria dell’NP-Completezza• Dominio limitato, quello delle tessere. Non c’è un algoritmo migliore della forza

    bruta (si pensa che nemmeno ci sia)

    Colorazione (carta geografica)

    • Commesso viaggiatore

    • rogrammazione lineare !"#$ data una matrice % di elementi interi didimensione m&n ed un vettore b di m elementi, esiste un vettore & di n elementi!"# tale che %&'b

    • oddisfabilit*$ quello dell’equazione booleana e dire se si pi+ rendere vera

    ono tutti problemi tanto -.

    Certificato polinomiale

    n algoritmo che data una presunta soluzione del problema verifica in tempopolinomiale che tale soluzione sia effettivamente una soluzione che da risposta /.

    Algoritmo non deterministico

    %lgoritmo che, posto di fronte alla necessit* di prendere una 0decisione1, ha la 0virtu2magica1 di scegliere sempre la strada giusta3/n termini equivalenti, è come se l’algoritmo, di fronte a pi4 alternative, le seguissetutte contemporaneamente, generando pi4 0copie1 di se stesso.Ciascuna copia procede la computazione, indipendentemente dalle altre, seguendo

    una e una sola delle alternative possibili.

  • 8/16/2019 Algoritmi-riassunto

    64/98

    Istruzioni elementari O(1

    • C!oic!e(c$ sceglie arbitrariamente un elemento dell’insieme finito C

    • "ailure$ che blocca la computazione in uno stato di fallimento

    #uccess$ che blocca la computazione in uno stato di successoNon determinismo

    Non determinismo$ sc!ema generale

  • 8/16/2019 Algoritmi-riassunto

    65/98

    Non determinismo tramite enumerazione

    Classe P

    Classe di tutti i problemi decisionali risolvibili in tempo polinomiale con algoritmideterministici

    Classe NP

    5a classe di tutti i problemi decisionali risolvibili in tempo polinomiale con algoritmi

    non deterministici

    • è contenuta in N

    • Non si sa se N è contenuta in

    %iduci&ilit' polinomiale

    iano A e B due problemi decisionali. i dice che A si riduce in tempo polinomiale a B,e si scrive A 6 B, se esiste una funzione f di trasformazione$

    f $ (dati d’ingresso per A) 7 (dati d’ingresso per B)

     8ale che$• f è computabile in tempo polinomiale con un algoritmo deterministico9

  • 8/16/2019 Algoritmi-riassunto

    66/98

    •  x è un dato d’ingresso per cui A d* risposta : se e solo se f(x) è un datod’ingresso per cui B d* risposta :

  • 8/16/2019 Algoritmi-riassunto

    67/98

    ;seguono cenni e spiegazioni poco comprensibili

  • 8/16/2019 Algoritmi-riassunto

    68/98

    Capitolo 19 – Tecniche risolutive per problemi intrattabili

    • Bisogna rinunciare a qualcosa

    o Generalità (algoritmi pseudo-polinomiali): per alcuni input, il problema

    potrebbe essere intrattabileo Ottimalità (algoritmi approssimazione): si cercano soluzioni non troppo

    distanti da quella ottima

    o Efficienza (algoritmi branchbound): si pota quando non si intra!edono

    soluzioni buone

    o "ormalità: (algoritmi euristici): soluzioni che sembrano buone, anche

    senza dimostrazione matematica

    • #omma di sottoinsieme: esiste un sottoinsieme che ha una certa somma$

    o #e la somma desiderata % O(nc), la complessità % polinomiale

    o #e la somma desiderata à esponenziale, la complessità % esponenziale

    • &lgoritmo 'ate-onotonic (iu, a*land): assegnare tempo di cpu a dei

    processi periodi

    • (continua+)

  • 8/16/2019 Algoritmi-riassunto

    69/98

    Misc

     

    Ricorrenze lineari con partizione bilanciata Tn=aTn/b+cnβa≥1b≥2β≥0α=logalogb

     

    • α≠β:Onmaxα, β• α=β:O(nmaxα, βlogn)•  

    • Master theorem•  Tn=aTn/b+fn• a≥1

    • b≥1α=logba

    • ∃ ε≥0 :fn=Onα-ε⇒Tn=nα•   fn=Θnα ⇒Tn=Θf(n)logn• ∃ ε≥0 :fn=!nα+ε∃ c"1 :afnb#cfn ⇒Tn=Θf(n)

    •   ($a %n c&'o n n *o)

    • Ricorrenze lineari di ordine costante

    • c0, β≥0• a=a

    • a=1⇒Onβ+1• a≥2⇒O(nβan)

  • 8/16/2019 Algoritmi-riassunto

    70/98

    ANALISI DI ALGORITMI

    Dimensione dell’input

    Criterio di costo logaritmico: la taglia dell'input è il numero di bit necessari perrappresentarlo .sempio! moltiplica"ione di numeri binari lung#i n bit

    Criterio di costo uniforme: la taglia dell'input è il numero di elementi c#e locostituiscono. sempio! ricerca minimo in un arra$ di n elementi

    In molti casi: possiamo assumere c#e gli %elementi& siano rappresentati da unnumero  costante di bit. Le due misure coincidono a meno di una costantemoltiplicatia

    Modello di calcolo: rappresentazione astratta di uncalcolatore

    Astrazione: dee sempli(icare i dettagli) altrimenti è inutile

    Realismo: dee ri(lettere la situa"ione reale

    Potenza: dee permettere di trarre conclusioni (ormali sul costo

    Binary search

    *un"iona solo su ettori ordinati. +omplessit,!O-log n

  • 8/16/2019 Algoritmi-riassunto

    71/98

    aratsu!a

    Sere per moltiplicare due binari con diide et impera

    +omplessit,! O-n

    /.01

    "election sort

    Ordina un ettore mettendo il minimo all2ini"io ogni olta +omplessit,!O-n3

  • 8/16/2019 Algoritmi-riassunto

    72/98

    Merge sort

    Ordinare un ettore con diide et impera +omplessit,!O-nlog-n

    Analisi ammortizzata

    +i sono tre metodi per (are l2analisi ammorti""ata!

    Metodo dell’aggregazione:

    • Si calcola la complessit, O-(-n per eseguire opera"ioni in se4uen"a nelcaso pessimo

    • Il costo ammorti""ato di una singola opera"ione è O-(-n5n

    Metodo degli accantonamenti #consigliato$:

  • 8/16/2019 Algoritmi-riassunto

    73/98

    • Alle opera"ioni engono assegnati costi ammorti""ati c#e possono esseremaggiori 5minori del loro costo e((ettio

    • 6roare c#e la somma dei costi ammorti""ati è un limite superiore al costoe((ettio

    Metodo del potenziale #ignorato$

    Counting sort

    7asato non sui con(ronti) dipende dal range -8 dei numeri+omplessit,! O-n98

  • 8/16/2019 Algoritmi-riassunto

    74/98

    STR:TT:R LMNTARI

    %ista circolare& !idirezionale& con sentinella

    ; possibile reali""are le liste con i ettori) bisogna gestire per< il problema delladimensione dinamica) meglio gestirla come (a =aa nell2arra$ list) incrementa ogniolta del doppio e dime""a 4uando l2occupa"ione è pari ad un 4uarto.

  • 8/16/2019 Algoritmi-riassunto

    75/98

    "tac' 

    *un"iona come i piatti in pi""eria) LI*O

    (ueue

  • 8/16/2019 Algoritmi-riassunto

    76/98

    *I*O

    AL7RI 7INARI DI RI+R+AAlberi binari in cui il (iglio sinistro è pi> piccolo del padre) il (iglio destro pi> grande

    del padreAl!eri !inari di ricerca

    Ricerca: implementazione

    +erca un alore nell2albero +omplessit,!O-logn

  • 8/16/2019 Algoritmi-riassunto

    77/98

    Ricerca del minimo e del massimo

    +omplessit,!O-logn

  • 8/16/2019 Algoritmi-riassunto

    78/98

    "uccessore)predecessore

    "uccessore: di un nodo è il pi> piccolo nodo maggiore di 4uel nodo

    Inserimento

    Nel caso pessimo dobbiamo scorrere tutto l2alte""a dell2albero+omplessit,! O-logn

  • 8/16/2019 Algoritmi-riassunto

    79/98

  • 8/16/2019 Algoritmi-riassunto

    80/98

    Cancellazione

    7isogna se in caso modi(icare l2albero perc#? rimanga un A7R

    Bilanciamento degli al!eriSpesso le opera"ioni -ricerca) cancella"ione ecc sugli A7R dipendono dall2alte""adell2albero. +oniene 4uindi cercare di tenere l2albero il pi> possibile bilanciato! c#enon i sia troppa dise4uit, di pro(ondit, (ra sottoalbero destro e sottoalbero sinistro.6er (are 4uesto dobbiamo (are ogni tanto delle rota"ioni.

  • 8/16/2019 Algoritmi-riassunto

    81/98

    Al!eri Red)Blac' *+reee,

    Sono implementati per preedere la bilanciatura dell2albero. Ogni nodo pu< essererosso o nero) le (oglie non contengono alori) sono nodi nil - in trealt, ne esiste solouno) tutti puntano a 4uello) per risparmiare memoria. La radice è nera) tutte le(oglie sono nere) i (igli di un nodo rosso sono ambedue neri.

    In pratica root e (oglie sono neri) non posso aere due rossi consecutii. Il pat# diogni (oglia contiene lo stesso numero di nodi neri.

    Altezza nera: il numero di nodi neri lungo ogni percorso da un nodo -escluso aduna (oglia -inclusa. Si indica con b-

    Altezza nera di un al!ero: è l2alte""a nera della radice

  • 8/16/2019 Algoritmi-riassunto

    82/98

    RB)+ree rotazione a sinistra

    RB)+ree inserimento nodo

    +ome negli A7R) poi si sistema il tutto +omplessit,!O-log n

  • 8/16/2019 Algoritmi-riassunto

    83/98

  • 8/16/2019 Algoritmi-riassunto

    84/98

    RB)+ree cancellazione

    *un"iona come negli A7R) solo c#e poi dobbiamo decidere se aggiustare o no) sidee aggiustare solo 4uando il nodo cancellato è nero!

    "e il nodo cancellato - rosso:

    l2alte""a nera rimane inariata• non sono stati creati nodi rossi consecutii

    • la radice resta nera

    "e il nodo cancellato - nero:

    • la radice pu< essere un nodo rosso

    • se il padre e uno dei (igli del nodo erano rossi ci troiamo con due rossi di (ila

    • cambia l2alte""a nera

    Complessit: /isitiamo 0#log n$ nodi ognuno in tempo 0#1$& 2uindi 0#log n$

  • 8/16/2019 Algoritmi-riassunto

    85/98

  • 8/16/2019 Algoritmi-riassunto

    86/98

    INSIMI DI@IONARI

    Riepilogo complessit

    Insieme: colle"ione di oggetti

    Dizionario: insieme di associa"ioni c#iaealore

    Insiemi realizzati con /ettori !ooleani

  • 8/16/2019 Algoritmi-riassunto

    87/98

    3antaggi: noteolmente semplice) e((iciente eri(icare se un elemento appartieneall2insieme

    "/antaggi:  occupa"ione di memoria O-N) indipendente dalla dimensionedell2insieme) opera"ioni ine((icienti O-N

    Insiemi realizzati con liste non ordinate3antaggi:  occupa"ione di memoriapropor"ionale alla dimensione del ettore

    "/antaggi: opera"ioni di ricerca) inserimento ecancella"ione O-nB unione) interse"ione edi((eren"a O-nm

    Insiemi realizzati con liste ordinate

    3antaggi: occupa"ione di memoriapropor"ionale alla dimensione del ettore)opera"ioni di unione) interse"ione e di((eren"aO-n

    "/antaggi: opera"ione di ricerca) inserimentoe cancella"ione! O-n

    Insiemi realizzati con strutture dati complesse

    Con al!eri di ricerca !ilanciati:

    • Ricerca) inserimento) cancella"ione! O-logn

    • Ciene mantenuto l2ordinamento• lencare tutti gli elementi! O-n

    Con ta!elle hash:

    • Ricerca) inserimento) cancella"ione! O-/

    • Ciene perso l2ordinamento

    • lencare tutti gli elementi! O-m doe m è la dimensione della tabella #as#

  • 8/16/2019 Algoritmi-riassunto

    88/98

  • 8/16/2019 Algoritmi-riassunto

    89/98

    A6 M*ST

    Code con priorit

    Le opera"ioni base iste (in ora -cancella"ione) inserimento ecc possono nonbastare) certe olte dobbiamo inentarne di nuoe. Le code di priorit, sono unastruttura dati (atta apposta per essere e((iciente a (are determinate opera"ioni. Glioggetti sono estratti dalla cosa in base alla loro priorit,.

    Al!ero !inario perfetto

     Tutte le (oglie #anno la stessa alte""a) tutti) tranne le (oglie #anno due (igli. Alte""aè 4uindi log n.

    Al!ero !inario completo Tutte le (oglie #anno pro(ondit, o /. Tutti i nodi a liello sono accatastati asinistra. Tutti i nodi interni #anno grado due) eccetto al pi> uno.

    4eap

    ; un particolare tipo di coda di priorit, nella 4uale i dati sono mantenuti in modopar"ialmente ordinato.

    Ma5 heap: albero binario completo in cui la radice è sempre il maggiore. -anc#enei sottoalberi) il padre è sempre il maggiore

    Min heap: albero binario completo in cui la radice è sempre minore -anc#e neisottoalberi

    Gli #eap non impongono nessun ordinamento (ra i (igli di un nodo -ordinamentopar"iale) l2importante è c#e i padre sia maggiore o minore rispettiamente per ilmaE e per il min #eap.

    • Ogni nodo è maggiore o uguale di se stesso

    • Se n Fm e mFn allora nm

    • Se nFm e mFr allora nFr

    L2ordinamento par"iale è utile per modellare gerarc#ie complesse o per mantenere

    in(orma"ioni par"iali. ; pi> semplice costruire uno #eap ordinato par"ialmente c#e4ualcosa ordinato totalmente.

    Array heap

    • AH/ contiene la radice

    • p-i Hi53 -limite in(eriore. 6adre

  • 8/16/2019 Algoritmi-riassunto

    90/98

    • l-i 3i. *iglio sinistro

    • r-i 3i9/. *iglio destro

    Procedure per gestire uno heap

    Ma5 heap restore

    Sere per mantenere la propriet, dei maE #eap dopo un inserimento +omplessit,!O-logn

    Ogni sottoalbero dee essere un maE #eap) 4uindi si cerca di (are scendere (ino al

    posto giusto il alore

    4eap !uild

    Sere per costruire un maE #eap da "ero -dato un ettore+omplessit,! O-nlogn

    4eapsort

  • 8/16/2019 Algoritmi-riassunto

    91/98

    Ordina sul posto un arra$ +omplessit,! O-nlogn

    Coda con priorit

    :na struttura dati c#e sere a mantenere un insieme S di elementi E) ciascuno con

    un alore associato di priorit,

  • 8/16/2019 Algoritmi-riassunto

    92/98

  • 8/16/2019 Algoritmi-riassunto

    93/98

    Riduzione priorit

    M6"7+

    Serono a rappresentare degli insiemi disgiunti) le opera"ioni (ondamentali sonounire pi> insiemi) identi(icare l2insieme a cui appartiene un oggetto. ; una colle"ionedi insiemi dinamici disgiunti -un insieme di insiemi. Ogni insieme è rappresentatoda un rappresentante unioco. Le ricerc#e del rappresentate sullo stesso insiemedeono restituire sempre lo stesso oggetto. Solo dopo un unione 4uesto oggetto pu<cambiare. Si pu< scegliere l2elemento pi> piccolo5grande di un insieme

  • 8/16/2019 Algoritmi-riassunto

    94/98

    Applicazione: tro/are le componenti connesse di un

    grafo

    Alla (ine aremo l2insieme delle comonenti connesse. +omplessit,!O-n9m

  • 8/16/2019 Algoritmi-riassunto

    95/98

    Implementazione !asata su liste

    • realizzazione !asata su liste: find 0#1$ merge 0#n$

    • reali""a"ione basata su alberi! (ind O-n merge O-/

    coniene anc#e inserire l2euristica del peso -se liste 5 rango -se alberi e la

    compressione dei percorsi. uristica sul peso! #o due liste) per unirle deo scegliereuno dei due rappresentanti ed applicarlo all2altra lista) logicamente attacco la pi>corta alla pi> lunga) 4uindi mi salo anc#e la dimensione.

    Nel caso delle liste! ogni elemento contiene un puntatore al successio) unpuntatore al rappresentante ed un oggetto

    6u< essere isto come un albero di alte""a /

    L2opera"ione (ind ric#iede O-/) si restituisce il rappresentante di J

    Il merge-E)$ ric#iede pi> tempo) si appende la lista c#e contiene K alla lista c#econtiene J) e poi engono modi(icati tutti i puntatori) caso pessimo per n opera"ioniO-n3) costo ammorti""ato! O-n.

    Implementazione !asata su al!eri

    Ogni nodo #a un oggetto ed il puntatore al padre) la radice punta a se stessa ed è ilrappresentante

    *ind O-n nel caso pessimo) bisogna risalire (ino a troare la radice

    Merge-E)$ O-/ si appendono gli alberi

    ui coniene applicare la compressione dei cammini!

  • 8/16/2019 Algoritmi-riassunto

    96/98

    uando si cerca 4ualcosa portiamo tutto in su. +os le successie ricerc#ecosteranno O-/!

    DICID T IM6RA

    Di/ide: diidi il problema in sotto problemi pi> piccoli ed indipendentiImpera! risoli i sotto problemi ricorsiamente

    Com!ina! unisci le solu"ioni dei sottoproblemi

  • 8/16/2019 Algoritmi-riassunto

    97/98

    Ordina un ettore sul posto) diide comlicato) nessun combina +omplessit,!O-nlogn

    Parentesizzare #decidere 2uale motiplicazione dimatrice fare prima$

    Strassen O-n3.1/

    inograd O-n3)1

  • 8/16/2019 Algoritmi-riassunto

    98/98

     TEOREMI DI ALGORITMI

    ----------------------------- Ricorrenze lineari con partizioni

    bilanciate: Tn= aTnb+cnβn>1dn=1

    ondizioni: a! b interi" a#1! b#$" c!d!β reali" c!d>% β#%

    &=lo'ba

    (e &>β Tn=On&

    (e &=β Tn=On&lo' n

    (e &)β Tn=Onβ

    • Esempio quando alfa > beta

     Tn=$Tn*+1 &=1$!β=% Tn=On&=On ,

    • Esempio quando alfa = beta

     Tn=$Tn*+n &=1$!β=1$ Tn=On&lo'n=Onlo'n ,

    • Esempio quando alfa < beta

     Tn=$Tn*+n &=1$!β=1 Tn=Onβ=On

    --------------------------------------------------------------- Mater

    t.eore/: Tn= aTnb+0n,n>1dn=1

    &=lo'ba

    (e 0n=On&- 2>% Tn=3n&

    (e 0n=3n& Tn=3n&lo' n(e 0n=4n&+2>%! c)1! /#% 5 a0nb6c0n 7 n#/ Tn=O0n,

    • Esempio fn=Onα-δ:

     Tn=8Tn9+n &=lo'98=$ dobbia/o cercare n delta c.e 0accia riltare &-=eponente di n"

    Eite e ;ale 1"