Non tutti gli alberi Rosso-Nero sono bilanciati?


30

Intuitivamente, gli "alberi bilanciati" dovrebbero essere alberi in cui i sottoalberi sinistro e destro di ciascun nodo devono avere "approssimativamente lo stesso" numero di nodi.

Ovviamente, quando parliamo di alberi bilanciati rosso-nero * (vedere la definizione alla fine), intendiamo effettivamente che sono bilanciati in altezza e in tal senso, sono bilanciati.

Supponiamo di provare a formalizzare l'intuizione sopra come segue:

Definizione: un albero binario è chiamato -balanced, con , se per ogni nodo , la disuguaglianza0 μ 1μ N0μ12N

μ|NL|+1|N|+11μ

contiene e per ogni , esiste un nodo per il quale l'istruzione precedente non riesce. è il numero di nodi nel sottoalbero sinistro di e | N | è il numero di nodi sotto l'albero con N come radice (inclusa la radice).| N L | N | N | Nμ>μ|NL|N|N|N

Credo che questi siano chiamati alberi equilibrati in parte della letteratura su questo argomento.

Si può dimostrare che se un albero binario con n nodi è μ -bilanciato (per una costante μ>0 ), allora l'altezza dell'albero è O(logn) , mantenendo così una buona ricerca proprietà.

Quindi la domanda è:

Esiste un μ>0 tale che ogni albero abbastanza grande rosso-nero è bilanciato μ ?


La definizione di alberi Rosso-Nero che usiamo (da Introduzione agli algoritmi di Cormen et al):

Un albero di ricerca binario, in cui ogni nodo è colorato in rosso o nero e

  • La radice è nera
  • Tutti i nodi NULL sono neri
  • Se un nodo è rosso, entrambi i suoi figli sono neri.
  • Per ciascun nodo, tutti i percorsi da quel nodo ai nodi NULL discendenti hanno lo stesso numero di nodi neri.

Nota: non contiamo i nodi NULL nella definizione di μ -balanced sopra. (Anche se credo che non importa se lo facciamo).


@Aryabhata: cos'è l'unicità ( ) nella tua modifica? Sto bene con il fatto che implica . Non penso che dovresti trovare l' esatto per dimostrare che l'altezza è . Mi sto perdendo qualcosa? 1μ>μ 113 μO(logn)14 μO(logn)
jmad

Inoltre, è necessaria un'istruzione negativa per fornire una catena di controesempio con un albero per ogni . Qualsiasi catena infinita che non abbia dimensioni decrescenti sarebbe sufficiente, no? nN
Raffaello

@jmad: Senza la modifica di , ogni albero è banalmente in equilibrio e quindi abbiamo una banale nessuna risposta alla domanda. Volevo evitarlo. 0μ0
Aryabhata,

@Raphael: non capisco. La dimensione del nodo dell'albero è . Stai dicendo che non importa quale albero scegliamo per e che ? Non mi sembra ovvio, ed è questo il problema! n R B nnthnRBnμn0
Aryabhata,

1
Una versione precedente di questa domanda affermava che il runtime di un algoritmo ricorsivo su un albero rosso-nero che fa una quantità lineare di lavoro ad ogni passo non è necessariamente . Questa affermazione era errata; Il bilanciamento dell'altezza implica che la profondità di un albero -rosso-nero sia . Pertanto, se si esegue il lavoro ad ogni livello dell'albero, il lavoro totale è . n O ( registro n ) O ( n )O(nlogn)nO(logn)O(n)O(nlogn)
JeffE,

Risposte:


31

Claim : alberi rosso-neri possono essere arbitrariamente ONU -balanced.μ

Idea di prova : riempire la sottostruttura destra con il maggior numero possibile di nodi e la sinistra con il minor numero possibile di nodi per un dato numero di nodi neri su ogni percorso foglia-radice.k

Dimostrazione : definire una sequenza di alberi rosso-neri in modo che abbia nodi neri su ogni percorso dalla radice a qualsiasi foglia (virtuale). Definire conTkTkkTk=B(Lk,Rk)

  • Rk 2 k - 1 l'albero completo di altezza con il primo, il terzo, ... livello colorato in rosso, gli altri in nero e2k1
  • Lk k - 1 l'albero completo di altezza con tutti i nodi colorati di nero.k1

Chiaramente, tutti i sono alberi rosso-neri.Tk

Ad esempio, questi sono , e , rispettivamente:T1T2T3


T_1
[ fonte ]


T_2
[ fonte ]


T_3
[ fonte ]


Ora verificiamo che l'impressione visiva del lato destro sia enorme rispetto a quella sinistra. Non conterò le foglie virtuali; non influiscono sul risultato.

La sottostruttura sinistra di è completa e ha sempre altezza e quindi contiene nodi. La sottostruttura destra, invece, è completa e ha altezza e quindi contiene nodi. Ora il valore -balance per la radice èTkk12k12k122k1μ

2k2k+22k=11+2kk0

che dimostra che non c'è come richiesto.μ>0


14

No. Considera un albero rosso-nero con la seguente struttura speciale.

  • La sottostruttura sinistra è un albero binario completo con profondità , in cui ogni nodo è nero.d
  • La sottostruttura destra è un albero binario completo con profondità , in cui ogni nodo a profondità dispari è rosso e ogni nodo a profondità pari è nero.2d

È semplice verificare che si tratti di un albero rosso-nero valido. Ma il numero di nodi nella sottostruttura destra ( ) è approssimativamente il quadrato del numero di nodi nella sottostruttura sinistra ( ).2 d + 1 - 122d+112d+11


+1: grazie! Ma il numero di nodi è compreso tra . Possiamo forse 'tamponarli' sufficientemente per ottenere un albero di una determinata dimensione ? (Sembra che dovrebbe essere fattibile). n22d+1+2d+11n
Aryabhata,

1
Hai già un controesempio per infinitamente molti , quindi perché preoccuparsi? Ma suppongo che se lo volessi, potresti aggiungere più nodi rossi alla sottostruttura sinistra o estrarre alcuni nodi rossi dalla sottostruttura destra. n
JeffE

@JeffE: Fondamentalmente la catena del controesempio sarebbe quindi un sottoinsieme 'denso', piuttosto che un sottoinsieme 'scarso'. Forse cambierò la formulazione della domanda.
Aryabhata,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.