Sappiamo tutti che ci sono un sacco di alberi binari di ricerca auto-bilanciati (BST), che sono i più famosi Red-Black e AVL. Potrebbe essere utile dare un'occhiata anche agli alberi AA e agli alberi di capro espiatorio.Albero di ricerca binario per intenzioni specifiche
Voglio eliminare le inserzioni e le ricerche, come qualsiasi altro BST. Tuttavia, sarà comune eliminare tutti i valori in un determinato intervallo o eliminare interi sottotitoli. Quindi:
- Voglio inserire, cercare, rimuovere valori in O (log n) (albero bilanciato).
- Vorrei eliminare una sottostruttura, mantenendo l'intero albero bilanciato, in O (log n) (caso peggiore o ammortizzato)
- Potrebbe essere utile per eliminare più valori di una riga, prima di bilanciare l'albero
- io molto spesso inserisco 2 valori immediatamente, tuttavia questa non è una regola (solo un suggerimento nel caso ci sia una struttura di dati ad albero che ne tiene conto)
esiste una variante di AVL o RB questo mi aiuta su questo? Gli alberi del capro espiatorio assomigliano più a questo, ma avrebbero bisogno anche di alcuni cambiamenti, chiunque abbia esperienza con loro può condividere alcuni pensieri?
Più precisamente, quale procedura di bilanciamento e/o procedura di rimozione mi aiuterebbe a mantenere questa azione efficiente in termini di tempo?
Off-topic: Sono interessato a questi tipi di algoritmi ma non so da dove iniziare a conoscerli. Qualche buona risorsa per principianti a cui puoi puntare? Qualcosa con esempi visivi sarebbe fantastico. –
colinodell, sono abbastanza sicuro che se pubblichi la tua domanda, riceverai molte risposte utili. –
Perché vuoi la possibilità di eliminare una sottostruttura? I contenuti di una particolare sottostruttura potrebbero cambiare drasticamente in un albero che si equilibra. – ephemient