Uma mediana de um AVL. Como tirar proveito do AVL?

8

Aqui está a fonte da minha pergunta.

Dada uma árvore de auto balanceamento (AVL), codifique um método que retorne a mediana.

(Mediana: o valor numérico que separa a metade superior de uma amostra de dados da metade inferior. Exemplo: se a série for

2, 7, 4, 9, 1, 5, 8, 3, 6

então a mediana é 5.)

Posso oferecer a seguinte solução:

  1. Atravesse a árvore especificada e retorne o número de elementos.
  2. Atravesse n / 2 + 1(se nfor ímpar) a árvore novamente aplicando uma caminhada em árvore em ordem. O valor do n / 2 + 1elemento th é a mediana.

Mas posso fazer isso com uma árvore de pesquisa binária, não posso? Existe um algoritmo melhor para um AVL?

Maksim Dmitriev
fonte
1
O link já responde à sua pergunta - o que mais você está procurando?
Yuval Filmus
Geralmente, os algoritmos de pesquisa para uma Árvore de Pesquisa Binária funcionam com uma árvore AVL, mas com uma AVL você obtém a garantia extra de que a altura da sua árvore é logarítmica no número de nós.
jmite

Respostas:

9

Se você modificar a árvore AVL armazenando o tamanho da subárvore em cada nó, e não apenas na altura, poderá encontrar a mediana no tempo O(logn)usando o fato de que a árvore está equilibrada. Para isso, escreva um procedimento mais geral. Selecione qual aceita um nó.v e um número ke encontra o ko menor nó da subárvore com raiz em v.

Suponha que a subárvore esquerda (se houver) tenha Lnós. E sekLentão recursamos para a subárvore esquerda. E sek=L+1 então voltamos v. Caso contrário, recuaremos para a subárvore direita, reduzindok de L+1.

O tempo de execução desse algoritmo é linear na altura da árvore, que é O(logn).

Yuval Filmus
fonte
Você poderia me dar um exemplo?
Maksim Dmitriev
Não, você terá que construir um você mesmo. Tente entender o que meu algoritmo está tentando realizar e como.
Yuval Filmus
Minha solução está em codereview.stackexchange.com/q/104525/23821
Maksim Dmitriev
0

AVL é uma árvore de pesquisa binária com alguma propriedade especial: é uma árvore de auto-equilíbrio. Sua altura é sempre logarítmica. A árvore binária comum em um dos piores cenários pode ser uma lista vinculada (se você adicionar dados classificados) para que a altura seja n. A árvore AVL no pior cenário é a árvore de fibonacci.

user3371350
fonte