![Page 1: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/1.jpg)
Árvores balanceadas
Aleardo Manacero Jr.
![Page 2: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/2.jpg)
Árvores Balanceadas
● Para que uma árvore seja, de fato, um mecanismo eficiente, é preciso que os seus elementos estejam distribuídos de forma relativamente homogênea pela estrutura (subárvores)● Como as operações de inserção e remoção são aleatórias, é preciso ter um operador capaz de manter os elementos distribuídos de forma homogênea entre as subárvores● Esse é o operador de balanceamento
![Page 3: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/3.jpg)
Árvores Balanceadas
● O balanceamento de uma árvore pode ser feito segundo duas estratégias:
Global – envolvendo toda a árvore
Local – envolvendo apenas uma parte da árvore
![Page 4: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/4.jpg)
Balanceamento Global
No balanceamento global a árvore balanceada pode ser construída a partir de uma estrutura externa
Nesse caso o algoritmo é relativamente simples, bastando criar uma lista ordenada com o conteúdo da árvore (antes ou mesmo depois da existência da árvore)
Dessa lista constróise a árvore já balanceada
![Page 5: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/5.jpg)
Balanceamento Global
● O problema nessa estratégia é a necessidade de uma estrutura externa à árvore
● Uma solução para esse problema é apresentada através do algoritmo DSW (Colin Day, Quentin Stout e Bette Warren)
● No algoritmo DSW o que se faz é transformar a árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre com operações de rotação
![Page 6: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/6.jpg)
Criando a espinha dorsal● Para cada nó vtx da árvore faça:
● Se vtx não é raiz e for filho à esquerda● Então faça vtx ser filho direito do seu avô● A subárvore direita de vtx se torna a subárvore esquerda de seu pai ● O nó vtx passa a ter seu pai como filho à esquerda
![Page 7: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/7.jpg)
Reconstruíndo a árvore
● Na modificação feita por Stout e Warren, a reconstrução usa o seguinte algoritmo:
1. Faz M=2k1, com M<N (nós da árvore)2. Faz compressão (raiz, NM)3. Para size=M, enquanto size>1, size/=2
3.1 Faz compressão ( raiz, size/2)
● Compressão é dada por rotações a esquerda dos nós da espinha, a partir da raiz
![Page 8: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/8.jpg)
Reconstruíndo a árvore
● O processo é invertido, porém adotandose passo 2 na escolha dos vértices que serão promovidos na estrutura da árvore
![Page 9: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/9.jpg)
Balanceamento Local
● O algoritmo DSW trabalha sobre a árvore toda. Se houver a necessidade de manter o balanceamento a cada inserção ou remoção, então sua eficiência fica bastante prejudicada
● Uma alternativa para esse problema é fazer uso de algoritmos que trabalhem apenas em parte da árvore, a cada inserção ou remoção
● Algoritmos desse tipo podem ser representados pelas árvores AVL ou árvores Rubronegras
![Page 10: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/10.jpg)
Árvores AVL
● Recebem esse nome a partir de seus criadores, os matemáticos G.M. AdelsonVelskii e E.M. Landis● A base do algoritmo está na manutenção dos índices de balanceamento em torno de 1 (1, 0 ou 1)● Quando o índice chega a 2 ou –2, deve ser refeito o balanceamento através de rotações
![Page 11: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/11.jpg)
Árvores AVL
● Rotação LL
![Page 12: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/12.jpg)
Árvores AVL
● Rotação RR
![Page 13: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/13.jpg)
Árvores AVL
● Rotação LR
![Page 14: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/14.jpg)
Árvores AVL
● Rotação RL
![Page 15: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/15.jpg)
Árvores Rubronegras
● São árvores autoajustáveis, que procuram manter o balanceamento de forma automática obrigandose que sejam atendidas as seguintes restrições:
Nós são vermelhos ou negrosA raiz é negraTodas as folhas são negrasOs dois filhos de um nó vermelho são negrosTodos os caminhos de algum nó para suas
folhas contêm o mesmo número de nós negros
![Page 16: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/16.jpg)
Árvores Rubronegras
● Essas restrições permitem garantir que o máximo caminho a partir da raiz até uma folha será, no máximo, o dobro do menor caminho
● Isso garante um balanceamento mínimo razoável
![Page 17: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/17.jpg)
Árvores Rubronegras
● Inserção (nó raiz) – transformase o nó para negro
● Inserção (pai negro) – não é preciso nenhuma alteração
![Page 18: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/18.jpg)
Árvores Rubronegras
● Inserção (pai e tio vermelhos)
![Page 19: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/19.jpg)
Árvores Rubronegras
● Inserção (pai vermelho, tio negro e nó é filho direito de filho esquerdo)
![Page 20: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/20.jpg)
Árvores Rubronegras
● Inserção (pai vermelho, tio negro e nó é filho esquerdo de filho esquerdo)
![Page 21: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/21.jpg)
Árvores Rubronegras
● Remoção é feita através da troca do nó a ser removido por nó imediatamente inferior ou superior (como numa árvore binária comum)● A seguir removese a cópia original do nó promovido, trocandoo por seu filho (chamado de N)● Se N for a nova raiz, não há nada mais a fazer
![Page 22: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/22.jpg)
Árvores Rubronegras
● Remoção (irmão é vermelho)
![Page 23: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/23.jpg)
Árvores Rubronegras
● Remoção (pai, irmão e sobrinhos são negros)
![Page 24: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/24.jpg)
Árvores Rubronegras
● Remoção (pai negro, irmão e sobrinhos são vermelhos)
![Page 25: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/25.jpg)
Árvores Rubronegras
● Remoção (irmão negro, sobrinho esquerdo vermelho, sobrinho direito negro e N é filho esquerdo)
![Page 26: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/26.jpg)
Árvores Rubronegras
● Remoção (irmão negro, sobrinho direito vermelho e N é filho esquerdo)
![Page 27: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/27.jpg)
Árvores de afunilamento (splay trees)
● O balanceamento de árvores parte do princípio de que as operações de busca, inserção e remoção ocorrem de forma uniformemente aleatória
● Isso falha na maioria dos sistemas de armazenamento de informações, quando alguns elementos são requisitados numa freqüência bem maior do que outros
![Page 28: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/28.jpg)
Árvores de afunilamento (splay trees)
● Nesses casos é interessante que a árvore tenha os elementos mais freqüentes mais próximos da raiz
● Isso é obtido com árvores de afunilamento, ou splay trees
● Nelas os nós acessados são movidos para cima através de rotações
![Page 29: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/29.jpg)
Rotações em Splay Trees
● Nó acessado é filho direito de filho esquerdo
![Page 30: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/30.jpg)
Rotações em Splay Trees
● Nó acessado é filho esquerdo de filho esquerdo
![Page 31: Árvores balanceadas - dcce.ibilce.unesp.braleardo/cursos/ed2/arvbalanc.pdf · árvore em uma espinha dorsal (árvore com formato de lista) e depois reconstruir a árvore, sempre](https://reader035.vdocuments.pub/reader035/viewer/2022062505/5c07d1b609d3f29f288bb330/html5/thumbnails/31.jpg)
Rotações em Splay Trees
● Nó acessado não tem avô