Como você prova que a altura esperada de uma árvore de pesquisa binária criada aleatoriamente com nós é O (\ log n) ? Há uma prova no CLRS Introduction to Algorithms (capítulo 12.4), mas eu não entendo.
10
Como você prova que a altura esperada de uma árvore de pesquisa binária criada aleatoriamente com nós é O (\ log n) ? Há uma prova no CLRS Introduction to Algorithms (capítulo 12.4), mas eu não entendo.
Respostas:
Vamos primeiro pensar sobre isso intuitivamente. No melhor cenário, a árvore está perfeitamente equilibrada; no pior cenário, a árvore está totalmente desequilibrada:
Começando no nó raiz , essa árvore esquerda tem o dobro de nós em cada profundidade subsequente, de forma que a árvore tenha nós e uma altura (que é neste caso 3). Com um pouco de matemática, , ou seja, tem altura. Para a árvore totalmente desequilibrada, a altura da árvore é simplesmente . Então, nós temos nossos limites.n = Σ h i = 0 2 i = 2 h + 1 - 1 h n ≤ 2 H + 1 - 1 → h ≤ ⌈ log 2 ( n + 1 ) - 1 ⌉ ≤ ⌊ l o g 2 N ⌋ S ( log n ) n - 1 → O ( n )p n=∑hi=02i=2h+1−1 h n≤2h+1−1→h≤⌈log2(n+1)−1⌉≤⌊log2n⌋ O(logn) n−1→O(n)
Se estivéssemos construindo uma árvore balanceada a partir de uma lista ordenada , escolheríamos o elemento do meio como nosso nó raiz. Se estivermos construindo uma árvore aleatoriamente, é provável que qualquer um dos nós seja escolhido e a altura da nossa árvore seja: Sabemos que em uma árvore de pesquisa binária, a subárvore esquerda deve conter apenas chaves menores que o nó raiz. Portanto, se escolhermos aleatoriamente o elemento , a subárvore esquerda possui elementos e a subárvore direita possui elementos, de forma mais compacta:{1,2,…,n} n
Como tenho certeza de que você notou, desviei um pouco de como o CLRS prova isso, porque o CLRS usa duas técnicas de prova relativamente comuns que são desconcertantes para os não iniciados. O primeiro é usar expoentes (ou logaritmos) do que queremos encontrar (neste caso, altura), o que torna a matemática um pouco mais limpa; o segundo é usar funções indicadoras (que vou ignorar aqui). O CLRS define a altura exponencial como , portanto a recorrência análoga é .Yn=2hn Yn=2×max(Yi−1,Yn−i)
Supondo que a independência (que cada desenho de um elemento (dentre os elementos disponíveis) seja a raiz de uma subárvore seja independente de todos os desenhos anteriores), ainda temos a relação: para o qual realizei duas etapas: (1) movendo o fora porque é uma constante e uma das propriedades das somas é que , e (2) movendo o 2 para fora porque também é uma constante e uma das propriedades dos valores esperados é . Agora vamos substituir o
Neste ponto, o CLRS extrai um nome de operação prova de indução de seu ... repertório de experiência matemática, um que inclui uma identidade eles deixam para o usuário provar. O que é importante sobre a escolha deles é que seu maior termo é e lembre-se de que estamos usando a altura exponencial que . Talvez alguém comente por que esse binômio em particular foi escolhido. A idéia geral, porém, é ligar acima de nossa recorrência com uma expressão para alguma constante .E[Yn]≤14(n+33) ∑n−1i=0(i+33)=(n+34) n3 Yn=2hn hn=log2n3=3log2n→O(logn) nk k
Para concluir com um liner:
fonte
n^k
), a conclusão é a mesma, porque ak
letra é descartada na notação big-O (a maneira como 3 foi descartada). Mas se substituíssemos por algo exponencial (e^n
), ainda seria um limite superior correto , mas não restrito . Sabemos que a altura esperada é pelo menos logarítmica, portanto, determinar se é no máximo logarítmica torna-a mais estreita.