Alberi binari e AVL quanfo ordinarli?

di il
4 risposte

Alberi binari e AVL quanfo ordinarli?

Buonasera a tutti e scusate se l'argomento nn è nel forum giusto ma é l'unico che sono riuscito a selezionare da tapatalk. Io ed un collega ci stiamo preparando per l'esame di algoritmi all'università e abbiamo un dubbio. Capito che l'albero Avl é un albero binario di ricerca bilanciato in altezza e che per definizione i dati su cui esegue la ricerca provengono da un 'universo ordinato ' (definizione del libro), in uno degli esercizi viene richiesto di cancellare per 3 volte la radice ed eseguire le rotazioni necessarie per ribilanciare l'avl. Il dubbio é: ma se durante le rotazioni mi ritrovo con l'albero non più ordinato quindi nn più un albero binario, cosa bisogna fare: riordinarlo anche se nn è espressamente richiesto dall'esercizio oppure dato che sto parlando di alberi di ricerca, nn ne tengo conto, eseguo quanto richiesto dall'esercizio (cioè cancello billancio per 3 volte sempre se necessario ) e poi restituisco l' albero bilanciato ottenuto? A occhio ho visto che rimane ordinato anche a seguito delle rotazioni ma volevo esser sicuro che se ci si affida alle definizioni, se dovesse essere disordinato ma bilanciato é comunque corretto...grazie mille!

Inviato dal mio LG-E440 utilizzando Tapatalk

4 Risposte

  • Re: Alberi binari e AVL quanfo ordinarli?

    Un albero AVL e' un normale albero binario, ordinato, a cui viene applicato come constraint che deve essere bilanciato (la definizione la sai).

    Un albero red/black, invece, e' un albero bilanciato, ma non un albero binario.

    Per poter essere ordinato, vuol dire che l'elemento che si utilizza per mantenere l'ordinamento deve avere associato un ordinamento totale. Ad esempio:

    interi, numeri con la virgola, stringhe, vettori se usi un ordinamento lessicografico ...

    senza una specifica implementazione, i numeri complessi non hanno un ordine totale; i nodi di un grafo nemmeno, ... ecc


    Se aggiungi o togli nodi all'albero, questo deve rimanere ordinato: nota che ho scritto ordinato e non bilanciato. E questo e' ovvio: se l'albero non dovesse essere ordinato, per controllare la presenza di un valore dovresti scandirlo tutto, ritrovandoti con una struttura dati con una complessita' uguale a quella di una lista O(N). Assolutamente inutile.
    Se invece sfrutti l'ordinamento, la mancanza di ordine ti impedirebbe di trovare il valore.

    Il bilanciamento influisce sul tempo di ricerca:

    immagina un normale albero binario con tutti i rami a sinistra vuoti, quindi tutto sbilanciato sulla destra: ci si ritrova con una struttura dati con complessita O(N). Praticamente una lista

    Un albero del genere lo crei se non fai il bilanciamento ed inserisci i valori in modo gia' ordinato ...

    Ora, che cosa fa il bilanciamento? Si assicura che il numero di valori sul ramo sinistro sia circa uguale al ramo destro. In questo modo la ricerca ha complessita O(log2(N)) ...

    Quindi, mentre l'ordinamento e' obbligatorio, non cosi' il bilanciamento ...
  • Re: Alberi binari e AVL quanfo ordinarli?

    Migliorabile, intanto grazie per la spiegazione!
    chiedo un ulteriore conferma, per capire...se ho capito!!
    Riassumendo, una volta che l'albero è stato ordinato,nonostante tutte le cancellazioni che posso fare, con le successive rotazioni per ribilancirlo, questo deve rimanere ordinato, altrimenti vuol dire che ho effettuato un una delle operazioni di bilanciamento, errata.

    Caso diverso se lo devo costruire; in questo caso, per ogni nuovo elemento inserito, devo rispettare le regole dell'albero binario: cioè a sinistra della radice (o del nodo padre) vanno inseriti i valori minori di questa (questo) a destre quelli maggiori e nel frattempo se calcolo uno sbilanciamento, bilancio con rotazioni!

    Grazie anticipatamente!
  • Re: Alberi binari e AVL quanfo ordinarli?

    Che tu faccia inserimenti o cancellazioni, l'albero deve rimanere sopprattutto ordinato, e bilanciato
  • Re: Alberi binari e AVL quanfo ordinarli?

    migliorabile ha scritto:


    Che tu faccia inserimenti o cancellazioni, l'albero deve rimanere sopprattutto ordinato, e bilanciato
    Perfetto!

    grazie ancora Migliorabile
Devi accedere o registrarti per scrivere nel forum
4 risposte