Alberi Binari di Ricerca
40 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Quale delle seguenti affermazioni è vera riguardo agli alberi binari di ricerca?

  • L'albero binario di ricerca può essere vuoto. (correct)
  • Ogni nodo deve avere esattamente due figli.
  • Tutti i nodi devono avere chiavi superiori al nodo padre.
  • Tutti i nodi devono avere chiavi uguali.
  • Ogni nodo in un albero binario di ricerca contiene solo un'etichetta e un puntatore al nodo padre.

    False (B)

    Cosa restituisce la funzione 'keys' in un albero binario di ricerca?

    L'insieme di etichette presenti in un albero.

    Un albero binario di ricerca deve rispettare che le etichette nel sottoalbero sinistro siano ____ al nodo padre.

    <p>minori</p> Signup and view all the answers

    Abbina i seguenti termini relativi agli alberi binari di ricerca con le loro descrizioni:

    <p>l = Sottoalbero sinistro r = Sottoalbero destro parent = Puntatore al nodo padre nil = Rappresentazione di sottoalberi vuoti</p> Signup and view all the answers

    Quale algoritmo stampa le etichette in ordine negli alberi binari di ricerca?

    <p>Print-Inorder (A)</p> Signup and view all the answers

    In un albero binario di ricerca, tutte le chiavi a sinistra di un nodo sono sempre maggiori di esso.

    <p>False (B)</p> Signup and view all the answers

    Qual è la rappresentazione di un albero binario di ricerca che facilita la risalita?

    <p>Aggiungere un puntatore al padre del nodo.</p> Signup and view all the answers

    Qual è la complessità nel caso peggiore dell'algoritmo ToList-Inorder?

    <p>O(n^2) (A)</p> Signup and view all the answers

    L'algoritmo ToList-Inorder utilizza l'operazione Append per concatenare due liste?

    <p>True (A)</p> Signup and view all the answers

    Cosa fa la funzione Ric-Search(x, T)?

    <p>Cerca un nodo S nell'albero T con S.key = x.</p> Signup and view all the answers

    L'algoritmo per copiare tutte le etichette in ordine restituisce una lista ordinata delle chiavi in __________.

    <p>T</p> Signup and view all the answers

    Abbina le seguenti operazioni con la loro complessità:

    <p>ListInsert = O(1) Append = O(|L1|) ToList-Inorder originale = O(n^2) ToList-Inorder ottimizzato = O(n)</p> Signup and view all the answers

    Quale operazione viene utilizzata per inserire un nodo in testa alla lista?

    <p>ListInsert (D)</p> Signup and view all the answers

    L'algoritmo ToList-Inorder visita i nodi in ordine crescente delle etichette?

    <p>False (B)</p> Signup and view all the answers

    Qual è la principale modifica per migliorare l'algoritmo evitando Append?

    <p>Utilizzare ListInsert per concatenare in testa anziché Append.</p> Signup and view all the answers

    Quale dei seguenti nodi è il nodo genitore del nodo 17 nell'albero dopo l'inserimento?

    <p>15 (C)</p> Signup and view all the answers

    Qual è la complessità dell'algoritmo di ricerca in un albero binario di ricerca?

    <p>O(h) (B)</p> Signup and view all the answers

    Il nodo 13 è un nodo foglia nell'albero dopo l'inserimento.

    <p>False (B)</p> Signup and view all the answers

    Qual è la funzione dell'algoritmo Tree-Insert?

    <p>Inserire un nuovo nodo in un albero binario di ricerca.</p> Signup and view all the answers

    Il successore di un nodo N in un albero binario di ricerca è il nodo con etichetta massima tra quelle minori di N.key.

    <p>False (B)</p> Signup and view all the answers

    Quale nodo non ha successore nell'albero descritto?

    <p>32</p> Signup and view all the answers

    In un albero binario di ricerca, ogni nodo ha al massimo _______ figli.

    <p>due</p> Signup and view all the answers

    Collega i seguenti nodi con la loro posizione nell'albero:

    <p>Nodo 5 = Radice Nodo 22 = Figlio destro di 13 Nodo 15 = Figlio sinistro di 22 Nodo 32 = Figlio destro di 22</p> Signup and view all the answers

    Il nodo S con chiave ___ è il nodo con chiave minima nell'albero.

    <p>minimo</p> Signup and view all the answers

    Quale condizione deve valere per trovare il successore di un nodo N?

    <p>N deve avere un discendente destro. (A)</p> Signup and view all the answers

    Quale operazione viene eseguita nel ciclo while dell'algoritmo Tree-Insert?

    <p>Trovare la posizione del nuovo nodo (D)</p> Signup and view all the answers

    Il nodo 18 è un nodo a sinistra del nodo 17 nell'albero dopo l'inserimento.

    <p>True (A)</p> Signup and view all the answers

    Abbina le seguenti funzioni ai loro scopi principali:

    <p>Tree-Min(T) = Trova il nodo con chiave minima Tree-Succ(N) = Trova il successore di N Ricerca(x) = Trova il nodo con chiave x Inserimento = Inserisce un nodo in un albero binario di ricerca</p> Signup and view all the answers

    Cosa rappresenta il valore 'nil' nell'albero binario di ricerca?

    <p>Un nodo vuoto o assente.</p> Signup and view all the answers

    La ricerca del nodo S in un albero binario di ricerca può restituire nil.

    <p>True (A)</p> Signup and view all the answers

    Se N non ha un discendente destro, il successore di N si trova risalendo fino al primo nodo con etichetta ___ di N.

    <p>maggiore</p> Signup and view all the answers

    Quale delle seguenti affermazioni è vera riguardo la cancellazione di un nodo Z che ha due figli?

    <p>L'etichetta in Z viene sostituita con l'etichetta minima in Z.right. (C)</p> Signup and view all the answers

    Se un nodo Z è una foglia, il suo genitore deve mantenere un riferimento a Z.

    <p>False (B)</p> Signup and view all the answers

    Qual è la prima operazione da eseguire quando Z è la radice e ha esattamente un figlio?

    <p>Impostare T al figlio di Z.</p> Signup and view all the answers

    Quando Z ha esattamente un figlio, si deve _____ l'unico figlio di Z al genitore di Z.

    <p>agganciare</p> Signup and view all the answers

    Abbina i casi di cancellazione con la loro descrizione:

    <p>Foglia = Settare a nil il riferimento nel genitore Un figlio = Agganciare il figlio al genitore Due figli = Sostituire l'etichetta con l'etichetta minima in Z.right</p> Signup and view all the answers

    Se Z è una foglia e la sua cancellazione è richiesta, quale operazione è corretta?

    <p>Il suo genitore imposta il suo riferimento a nil. (A)</p> Signup and view all the answers

    Un nodo con due figli può essere cancellato senza la necessità di sostituirlo con un altro nodo.

    <p>False (B)</p> Signup and view all the answers

    Qual è il passo successivo dopo aver sostituito l'etichetta di Z con l'etichetta minima in Z.right?

    <p>Eliminare il nodo che conteneva l'etichetta minima.</p> Signup and view all the answers

    Flashcards

    Albero binario di ricerca (BST)

    Un albero binario di ricerca (BST) è una struttura dati ad albero dove ogni nodo contiene un valore, e i nodi sono organizzati in un modo tale che per ogni nodo, tutti i nodi nel suo sottoalbero sinistro hanno valori minori o uguali al suo valore, mentre tutti i nodi nel suo sottoalbero destro hanno valori maggiori.

    BRT(A)

    L'insieme di tutti gli alberi binari di ricerca su un insieme ordinato A è chiamato BRT(A). Questo insieme contiene tutti gli alberi binari di ricerca possibili che possono essere costruiti con gli elementi di A.

    Definizione di un BST

    Un albero binario di ricerca può essere vuoto (∅) o composto da un nodo radice (a) con un sottoalbero sinistro (l) e un sottoalbero destro (r), dove tutti i nodi in L sono minori di a e tutti i nodi in R sono maggiori di a.

    Rappresentazione grafica di un BST

    Per visualizzare un albero binario di ricerca, si usa una rappresentazione grafica dove ogni nodo è rappresentato da un cerchio contenente il suo valore. I puntatori sono linee che collegano i nodi, con linee orizzontali per le radici e linee verticali per i sottoalberi.

    Signup and view all the flashcards

    Rappresentazione computazionale di un BST

    Ogni nodo in un albero binario di ricerca contiene una key (il suo valore) e due puntatori: left e right. Il puntatore left punta al sottoalbero sinistro, mentre right punta al sottoalbero destro. In alcuni casi, viene aggiunto anche un puntatore parent che punta al padre del nodo.

    Signup and view all the flashcards

    Stampa in ordine (Inorder Traversal)

    L'algoritmo di stampa in ordine per un BST visita tutti i nodi dell'albero in ordine crescente dei loro valori. L'algoritmo funziona ricorsivamente visitando prima il sottoalbero sinistro, poi la radice e infine il sottoalbero destro.

    Signup and view all the flashcards

    Stampa in ordine

    Un algoritmo che stampa tutte le chiavi di un albero binario di ricerca in ordine crescente.

    Signup and view all the flashcards

    ToList-Inorder (Versione 1)

    Un algoritmo che crea una lista ordinata di tutte le chiavi presenti in un albero binario di ricerca.

    Signup and view all the flashcards

    ToList-Inorder (Versione 2)

    Un algoritmo che crea una lista ordinata di tutte le chiavi presenti in un albero binario di ricerca.

    Signup and view all the flashcards

    Caso peggiore ToList-Inorder (Versione 1)

    Il caso peggiore per l'algoritmo ToList-Inorder (Versione 1) si verifica quando l'albero è completamente sbilanciato a destra o a sinistra.

    Signup and view all the flashcards

    Ricerca ricorsiva

    Un algoritmo che cerca una chiave specifica in un albero binario di ricerca.

    Signup and view all the flashcards

    Ricerca in un BST (Tree-Search)

    L'algoritmo 'Tree-Search(T, x)' cerca un nodo con chiave 'x' in un BST 'T'. Se il nodo è presente, viene restituito; altrimenti, viene restituito 'nil'.

    Signup and view all the flashcards

    Complessità della ricerca in un BST

    La complessità dell'algoritmo di ricerca in un BST è O(h), dove 'h' è l'altezza dell'albero. Questo perché nell'algoritmo si seguono al massimo 'h' archi.

    Signup and view all the flashcards

    Ricerca del minimo in un BST (Tree-Min)

    L'algoritmo 'Tree-Min(T)' restituisce il nodo con la chiave minima in un BST non vuoto 'T'.

    Signup and view all the flashcards

    Complessità della ricerca del minimo

    La complessità dell'algoritmo di ricerca del minimo è O(h), dove 'h' è l'altezza dell'albero. Questo perché si seguono al massimo 'h' archi verso sinistra.

    Signup and view all the flashcards

    Successore in un BST

    Il successore di un nodo 'N' in un BST 'T' è il nodo con la chiave minima tra quelle maggiori di 'N.key'.

    Signup and view all the flashcards

    Ricerca del successore (Tree-Succ)

    L'algoritmo 'Tree-Succ(N)' restituisce il successore del nodo 'N' in un BST, se esiste; altrimenti, restituisce 'nil'.

    Signup and view all the flashcards

    Inserimento in un BST

    L'inserimento di una chiave 'x' in un BST crea un nuovo nodo con chiave 'x' e lo inserisce nella posizione corretta all'interno dell'albero, preservando la proprietà di ordinamento.

    Signup and view all the flashcards

    Complessità dell'inserimento

    L'inserimento in un BST ha una complessità di O(h), dove 'h' è l'altezza dell'albero. Questo perché per trovare la posizione corretta, potrebbero essere necessari al massimo 'h' confronti.

    Signup and view all the flashcards

    Algoritmo di Inserimento in un BST

    Un algoritmo che inserisce un nuovo nodo in un albero binario di ricerca mantenendo la proprietà di ordinamento.

    Signup and view all the flashcards

    Nodo genitore

    Il nodo in cui deve essere inserito un nuovo nodo. Viene determinato durante la ricerca nel BST.

    Signup and view all the flashcards

    Ricerca dell'inserimento

    Il processo di ricerca del nodo genitore e del punto esatto dove inserire un nuovo nodo nell'albero.

    Signup and view all the flashcards

    Inserimento figli

    Il nuovo nodo è sempre inserito come figlio del nodo genitore.

    Signup and view all the flashcards

    Controllo duplicati

    Quando il nuovo nodo ha un valore uguale al nodo corrente, viene ignorato.

    Signup and view all the flashcards

    Posizionamento figlio

    L'algoritmo stabilisce se il nuovo nodo deve essere inserito come figlio sinistro o destro del nodo genitore.

    Signup and view all the flashcards

    Fase di inserimento

    La parte dell'algoritmo che effettua l'effettivo inserimento del nuovo nodo in base alla sua posizione

    Signup and view all the flashcards

    Nodo inserito è una foglia

    Il nuovo nodo inserito non ha figli iniziali. Un nodo appena inserito è fondamentalmente un nodo foglia.

    Signup and view all the flashcards

    Cancellazione di un nodo foglia

    Se il nodo Z è una foglia, basta eliminare il riferimento al nodo Z nel suo genitore. Se Z è la radice, l'albero diventa vuoto.

    Signup and view all the flashcards

    Cancellazione di un nodo con un solo figlio

    Se il nodo Z ha un solo figlio, bisogna agganciare il figlio di Z al genitore di Z.

    Signup and view all the flashcards

    Cancellazione di un nodo con due figli

    Se il nodo Z ha due figli, si sostituisce l'etichetta di Z con l'etichetta minima del suo sottoalbero destro. Successivamente si elimina il nodo che conteneva l'etichetta minima, applicando uno dei due metodi precedenti (ha al massimo un figlio).

    Signup and view all the flashcards

    Algoritmo 1-Delete(Z, T)

    L'algoritmo 1-Delete(Z, T) rimuove il nodo Z da un albero binario di ricerca T, dove Z ha esattamente un figlio.

    Signup and view all the flashcards

    Algoritmo Tree-Delete(Z, T)

    L'algoritmo Tree-Delete(Z, T) rimuove il nodo Z da un albero binario di ricerca T. Gestisce tutti i casi di cancellazione (foglie, un figlio, due figli).

    Signup and view all the flashcards

    Tree-Min(Z.right)

    Trova il nodo con la chiave minima nel sottoalbero destro di Z.

    Signup and view all the flashcards

    Sostituzione della chiave in caso di due figli

    Sostituisci la chiave di Z con la chiave minima nel sottoalbero destro di Z, quindi elimina il nodo con la chiave minima.

    Signup and view all the flashcards

    Simulazione dell'algoritmo Tree-Delete

    Simulare l'algoritmo Tree-Delete(Z, T) utilizzando un albero binario di ricerca disegnato, per i diversi casi di cancellazione.

    Signup and view all the flashcards

    ToList-Inorder

    Un algoritmo che crea una lista ordinata di tutte le chiavi presenti in un albero binario di ricerca. Viene utilizzata una tecnica ricorsiva per visitare l'albero in ordine, aggiungendo le chiavi alla lista man mano che vengono incontrate.

    Signup and view all the flashcards

    Caso peggiore ToList-Inorder

    Il caso peggiore per l'algoritmo ToList-Inorder si verifica quando l'albero è completamente sbilanciato a destra o a sinistra. In questo caso, l'algoritmo deve eseguire un numero di operazioni Append pari al numero di nodi nell'albero, portando a una complessità temporale di O(n^2).

    Signup and view all the flashcards

    Ricerca iterativa

    Un algoritmo che visita un albero binario di ricerca in modo iterativo, cercando una chiave specifica in esso. A differenza della ricerca ricorsiva, mantiene una traccia esplicita del percorso al nodo corrente e della direzione successiva da prendere.

    Signup and view all the flashcards

    Cancellazione di un nodo

    Un algoritmo che rimuove un nodo da un albero binario di ricerca, mantenendo la proprietà di ordinamento dell'albero. Gestisce diversi casi, inclusi: nodo foglia, nodo con un solo figlio e nodo con due figli.

    Signup and view all the flashcards

    Caso peggiore

    Il caso peggiore dell'algoritmo per la generazione della lista ordinata delle chiavi in un albero binario di ricerca si verifica quando l'albero è completamente sbilanciato. L'algoritmo deve eseguire un numero di operazioni Append pari al numero di nodi nell'albero, portando a una complessità temporale di O(n^2), dove n è il numero di elementi nell'albero.

    Signup and view all the flashcards

    Study Notes

    Alberi Binari di Ricerca

    • Obiettivi: Gli alberi binari di ricerca sono strutture dati ricorsive. Lo studio mira a sviluppare algoritmi ricorsivi su tali alberi.
    • Argomenti: La definizione, la rappresentazione e gli algoritmi fondamentali per gli alberi binari di ricerca sono trattati.

    Definizione e Rappresentazione

    • Insieme Ordinato: Gli alberi binari di ricerca operano su insiemi ordinati (A) di etichette.
    • Definizione Ricorsiva: Un albero binario di ricerca vuoto appartiene all'insieme BRT(A). Un albero non vuoto è composto da un'etichetta (a) e due sottoalberi binari di ricerca (l ed r). Le etichette di l sono tutte minori di a, e le etichette di r sono tutte maggiori di a.
    • Rappresentazione: Ogni nodo dell'albero contiene un'etichetta (chiave) e due puntatori: left e right, che puntano ai sottoalberi sinistro e destro rispettivamente. Un puntatore al padre (parent) può essere aggiunto per facilitare le operazioni.

    Algoritmi

    • Stampa Inordine (PRINT-INORDER): Stampa le etichette in ordine crescente. L'algoritmo visita ricorsivamente il sottoalbero sinistro, stampa la chiave del nodo corrente, poi visita il sottoalbero destro.
    • ToList Inordine (TOLIST-INORDER): Crea una lista con le etichette in ordine crescente. L'algoritmo visita ricorsivamente il sottoalbero sinistro, inserisce la chiave del nodo corrente nella lista, poi visita il sottoalbero destro. Utilizza le funzioni LISTINSERT ed APPEND per la manipolazione della lista. Nota: un'implementazione alternativa evita APPEND, migliorando la complessità a O(n).
    • Ricerca di un Elemento (SEARCH): Ricerca un elemento (x) nell'albero. Se la chiave cercata è uguale a quella del nodo corrente si restituisce il nodo; altrimenti, se la chiave è minore della chiave del nodo, si prosegue la ricerca nel sottoalbero sinistro, altrimenti nel destro; se l'albero è vuoto, si restituisce nil. (ricorsivo e iterativo). Complessità O(h), dove h è l'altezza dell'albero.
    • Ricerca del Minimo (TREE-MIN): Trova il nodo con la chiave minima nell'albero. Scendendo ricorsivamente verso sinistra fino a raggiungere un nodo senza sottoalbero sinistro. Complessità O(h).
    • Ricerca del Successore (TREE-SUCC): Trova il nodo con la chiave immediatamente successiva a quella del nodo dato (N). Se il nodo ha un sottoalbero destro, il successore è il nodo minimo nel sottoalbero destro. Altrimenti, si risale l'albero fino a trovare l'antenato che è a sinistra di un ramo, in cui quest'ultimo viene restituito (il parent è il successore).
    • Inserimento (TREE-INSERT): Inserisce un nuovo nodo nell'albero mantenendo la proprietà di ordinamento degli alberi binari di ricerca.
    • Cancellazione (DELETE): Elimina un nodo dall'albero mantenendo la struttura di albero binario di ricerca. Distingue i casi con 0, 1, e 2 figli.

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Related Documents

    Description

    Questo quiz esplora gli alberi binari di ricerca, strutture dati ricorsive fondamentali nella programmazione. Si trattano argomenti come la definizione, la rappresentazione e gli algoritmi associati. Scopri come funzionano e come implementare questi algoritmi in modo efficace.

    More Like This

    Binary Search Trees
    44 questions

    Binary Search Trees

    RefinedBowenite avatar
    RefinedBowenite
    Binary Search Trees Quiz
    5 questions
    Balanced Binary Search Trees Quiz
    10 questions
    Use Quizgecko on...
    Browser
    Browser