Algoritmi e strutture dati
This presentation is the property of its rightful owner.
Sponsored Links
1 / 30

Algoritmi e strutture dati PowerPoint PPT Presentation


  • 69 Views
  • Uploaded on
  • Presentation posted in: General

Algoritmi e strutture dati. Alberi binari di ricerca (BST). albero binario di ricerca. albero binario che soddisfa la seguente proprietà.

Download Presentation

Algoritmi e strutture dati

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Algoritmi e strutture dati

Algoritmi e strutture dati

Alberi binari di ricerca (BST)


Albero binario di ricerca

albero binario di ricerca

  • albero binario che soddisfa la seguente proprietà

per ogni nodo, tutte le chiavi nel suo sottoalbero sinistro sono  della chiave v associata al nodo e tutti le chiavi nel suo sottoalbero destro sono  di v

Algoritmi e strutture dati


Albero binario di ricerca 2

albero binario di ricerca/2

49

49

22

82

22

82

17

57

88

17

47

88

20

94

20

94

ok

errato!

91

91

Algoritmi e strutture dati


Albero binario di ricerca 3

albero binario di ricerca/3

  • indicato spesso come BST (binary search tree)

  • utilizzabile quando le chiavi appartengono a un universo totalmente ordinato

  • ipotesi semplificativa di lavoro: chiavi strettamente minori nei sottoalberi sinistri e strettamente maggiori nei sotto alberi destri

Algoritmi e strutture dati


Rappresentazione dei nodi

rappresentazione dei nodi

  • in molti casi può essere la stessa usata negli alberi binari (classe BinaryNode)

    • in alternativa, la si può estendere

  • per le variabili membro possiamo usare lo specificatore di accesso private o protected

    • le conseguenze sono differenti

Algoritmi e strutture dati


Rappresentazione collegata dei nodi

rappresentazionecollegata dei nodi

public class BSTNode {

protected Comparable key;

// interface Comparable richiede metodo compareTo

BSTNode leftChild, rightChild; // rappr. minima

public BSTNode() {…}

public BSTNode(Object el) {…}

public BSTNode(Object el, BSTNode lt, BSTNode rt) {…}

public void visit() { key.visit(); }

public boolean isLeaf() {…}

}

Algoritmi e strutture dati


Public interface comparable

public interface Comparable

  • public int compareTo(Object o)

  • returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified Object o

    • The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) for all x and y. (This implies that x.compareTo(y) must throw an exception iff y.compareTo(x) throws an exception.)

    • The implementor must also ensure that the relation is transitive: (x.compareTo(y)>0 && y.compareTo(z)>0) implies x.compareTo(z)>0

    • Finally, the implementer must ensure that x.compareTo(y)==0 implies that sgn(x.compareTo(z)) == sgn(y.compareTo(z)), for all z

Algoritmi e strutture dati


Public interface comparable 2

public interface Comparable/2

  • It is strongly recommended, but not strictly required that (x.compareTo(y)==0) == (x.equals(y)). Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals"

Algoritmi e strutture dati


Operazioni sui bst

operazioni sui BST

public interface BST {

void clear();

boolean isEmpty();

BSTNode search(BSTNode p, Comparable el);

void insert(BSTNode node);

boolean isInTree(Comparable el);

int getSize();

void inorder(BSTNode p);

void preorder(BSTNode p);

void postorder(BSTNode p);

void breadthFirst();

int treeHeight(BSTNode radice);

}

Algoritmi e strutture dati


Altre operazioni sui bst

altre operazioni sui BST

BSTNode minimum(BSTNode v);

BSTNode maximum(BSTNode v);

BSTNode successor(BSTNode v);

BSTNode predecessor(BSTNode v);

Algoritmi e strutture dati


Elementi o nodi

elementi o nodi?

  • il metodo che implementa l’operazione search può restituire elementi (Object) o nodi (BSTNode)

    • Object

      • viene rafforzato l’incapsulamento

      • variabili membro protected

    • BSTNode

      • operazioni su sottoalberi

      • variabili membro private e metodi accessori/modificatori

  • il dilemma vale anche per altri metodi

    • successor, delete (parametro formale), …

Algoritmi e strutture dati


Ricerca in un bst

ricerca in un BST

k(v) = chiave (tipo scalare) associata a nodo v

rt(v) = figlio destro di v

lt(v) = figlio sinistro di v

algorithm search (key k)

t = <root-node>

while(t != null)

if(k(t) > k) t = rt(t);

else if(k(t) < k) t = lt(t);

else return t; // o return k;

return null;

Algoritmi e strutture dati


Ricerca in un bst 2

ricerca in un BST/2

versione ricorsiva

algorithm search (key k, node p)

if(p == null)

return null;

if(k == k(p))

return p;

if (k < k(p))

return search(k, lt(p));

else

return search(k, rt(p));

Algoritmi e strutture dati


Costo della ricerca in un bst

49

21

52

56

54

67

77

75

83

costo della ricerca in un BST

BST di n nodi

  • caso peggiore

    • O(n)

  • caso medio

    • dipende dalla distribuzione

  • caso migliore

    • O(1) (poco interessante)

Algoritmi e strutture dati


Costo della ricerca in un bst 2

costo della ricerca in un BST/2

  • nel caso di distribuzione uniforme delle chiavi il valore atteso dell'altezza dell'albero è O(lg n)

    • N.B. L'altezza di un albero binario di n nodi varia in {lg2n + 1,…, n}

  • un BST con chiavi uniformemente distribuite ha un costo atteso di ricerca O(lg n)

Algoritmi e strutture dati


Analisi del caso medio

analisi del caso medio

  • IPL (internal path length):somma lungh. percorsi radice-nodo, per tutti i nodi

  • lungh. media percorso radice-nodo:

    IPL/(#nodi)

Algoritmi e strutture dati


Analisi del caso medio 2

analisi del caso medio/2

  • chiavi 1,…,n presenti in un BST di n nodi (senza perdita di generalità)

  • Pn (i ): percorso medio in BST di n nodi avente chiave i in radice

  • Pn : percorso medio in BST di n nodi

  • se k(radice) = i allora

    • sottoalbero sx ha i – 1 chiavi

    • sottoalbero dx ha n – i chiavi

Algoritmi e strutture dati


Inserimento in un bst

inserimento in un BST

nuovo nodo u viene inserito come foglia

  • fase 1: cerca il nodo genitore v

  • fase 2: inserisci u come figlio di v

Algoritmi e strutture dati


Inserimento in un bst 2

fase 1

inserimento in un BST/2

Algorithm insert(key k)

p = root;

while (p != null) {

prev = p;

if (k(p) < k) p = rt(p);

else p = lt(p);

}

if (root == null) // BST vuoto

root = new BSTNode(k);

else if (k(prev) < k)

rt(prev) = new BSTNode(k);

else lt(prev) = new BSTNode(k);

fase 2

Algoritmi e strutture dati


Inserimento in un bst 3

inserimento in un BST/3

  • la fase 1 termina quando si raggiunge un nodo del BST privo del figlio in cui avrebbe avuto senso continuare la ricerca

    • non necessariamente una foglia

  • la fase 2 si limita a collegare una nuova foglia

60

49

21

52

56

54

67

77

75

83

Algoritmi e strutture dati


Inserimento in un bst 4

49

21

52

56

54

67

60

77

75

83

inserimento in un BST/4

caso peggiore

  • costo fase 1: O(n )

  • costo fase 2: O(1)

  • costo totale: O(n )

    caso medio (distrib. unif.)

  • costo fase 1: O(lg n )

  • costo fase 2: O(1)

  • costo totale: O(lg n )

Algoritmi e strutture dati


Costo dell inserimento in un bst

costo dell'inserimentoin un BST

  • ogni inserimento introduce una nuova foglia

  • il costo è (proporzionale a) la lunghezza del ramo radice-foglia

  • nel caso peggiore O(n )

Algoritmi e strutture dati


Cancellazione da un bst

cancellazione da un BST

tre casi

  • cancellazione di una foglia

  • cancellazione di un nodo con un solo figlio

  • cancellazione di un nodo con due figli

Algoritmi e strutture dati


Cancellazione da un bst 2

cancellazione da un BST/2

cancellazione di una foglia

  • basta individuare il nodo genitore e mettere a null la variabile membro opportuna (leftChild o rightChild)

  • individuare il genitore significa sostanzialmente effettuare una ricerca (come nella fase 1 dell'inserimento)

    • un approccio alternativo è basato sulla tramatura dell'albero (i nodi contengono altri riferimenti, ad es., al genitore)

Algoritmi e strutture dati


Cancellazione da un bst 3

49

21

52

56

54

67

60

77

75

83

cancellazione da un BST/3

cancellazione di 83

49

49

21

52

21

52

56

56

54

67

54

67

60

77

60

77

75

83

75

Algoritmi e strutture dati


Cancellazione da un bst 4

cancellazione da un BST/4

cancellazione di un nodo u con un solo figlio v

  • individuare genitore w di u

    • se u è radice v diviene la nuova radice

  • se esiste w, sostituire al collegamento (w,u ) il collegamento (w,v )

w

w

w

w

u

u

u

u

v

v

v

v

Algoritmi e strutture dati


Cancellazione da un bst 41

49

49

49

21

52

56

21

52

21

56

56

54

67

60

77

54

67

54

67

75

60

77

60

77

75

75

cancellazione da un BST/4

cancellazione di 52

Algoritmi e strutture dati


Cancellazione da un bst 5

cancellazione da un BST/5

cancellazione di un nodo u con due figli (ci si riconduce ad uno dei casi precedenti)

  • individuare predecessore v (o successore) di u

    • v non può avere due figli, altrimenti non sarebbe predecessore (successore)

  • copiare la chiave di v al posto di quella di u

  • cancellare nodo v

    • v è foglia o ha un solo figlio

Algoritmi e strutture dati


Cancellazione da un bst 6

cancellazione da un BST/6

u

u

u

u

copia chiave

v

w

v

v

w

w

w

cancella v

Algoritmi e strutture dati


Costo della cancellazione in un bst

costo della cancellazionein un BST

  • la cancellazione di un nodo interno richiede l'individuazione del nodo da cancellare nonché del suo predecessore (o successore)

  • nel caso peggiore entrambi i costi sono lineari: O(n ) + O(n ) = O(n )

da cancellare

n/2

u

n/2

v

predecessore

Algoritmi e strutture dati


  • Login