Para contar muitos tipos de objetos combinatórios, como árvores neste caso, existem ferramentas matemáticas poderosas (o método simbólico) que permitem derivar mecanicamente essas contagens de uma descrição de como os objetos combinatórios são construídos. Isso envolve gerar funções.
Uma excelente referência é a Analytic Combinatorics , do falecido Philipe Flajolet e Robert Sedgewick. Está disponível no link acima.
O livro do falecido Herbert Wilf, que gera a funcionalidade, é outra fonte livre.
E, é claro, a Matemática Concreta da GKP é um tesouro.
Para árvores binárias, é assim: primeiro você precisa de uma definição clara da árvore.
Uma árvore binária é uma árvore enraizada na qual todo nó não-folha possui exatamente o grau 2.
Em seguida, temos que concordar com o que queremos chamar de tamanho de uma árvore.
À esquerda, todos os nós são iguais. No meio, distinguimos as folhas e as não-folhas. À direita, temos uma árvore binária podada, onde as folhas foram removidas. Observe que ele tem ramificações unárias de dois tipos (esquerda e direita)!
Agora temos que derivar uma descrição de como esses objetos combinatórios são construídos. No caso de árvores binárias, é possível uma decomposição recursiva .
Seja o conjunto de todas as árvores binárias do primeiro tipo e, simbolicamente, temos:
A
Ele lê como: “Um objeto da classe de árvores binárias é um nó ou um nó seguido por duas árvores binárias.” Isso pode ser escrito como equação de conjuntos:
A={∙}∪({∙}×A×A)
Ao introduzir a função geradora que enumera essa classe de objetos combinatórios, podemos converter a equação definida em uma equação envolvendo a função geradora.A(z)
A(z)=z+zA2(z)
Nossa escolha de tratar todos os nós igualmente e considerar o número de nós na árvore como noção de seu tamanho é expressa pela “marcação” dos nós com a variável .z
Agora podemos resolver a equação quadrática para e obter, como sempre, duas soluções, a forma fechada explícita da função geradora:A ( z )zA2(z)−A(z)+z=0A(z)
A(z)=1±1−4z2−−−−−−√2z
Agora, simplesmente precisamos do Teorema Binomial de Newton (generalizado):
(1+x)a=∑k=0∞(ak)xk
com e para expandir a forma fechada da função volta gerador em uma série de potências. Fazemos isso porque, o coeficiente em é apenas o número de objetos combinatórios de tamanho , normalmente escritos como . Mas aqui nossa noção do "tamanho" da árvore nos obriga a procurar o coeficiente em . Após um pouco de malabarismo com binômios e fatoriais, obtemos:a=1/2x=−4z2znn[zn]A(z)z2n+1
[z2n+1]A(z)=1n+1(2nn).
Se começarmos com a segunda noção do tamanho, a decomposição recursiva é:
Temos uma classe diferente de objetos combinatórios . Diz: "Um objeto da classe de árvores binárias é uma folha ou um nó interal seguido por duas árvores binárias".B
Podemos usar a mesma abordagem e transformar em . Só que desta vez a variável marca apenas os nós internos, não as folhas, porque a definição "o tamanho" é diferente aqui. Também temos uma função geradora diferente:B={□}∪({∙}×B×B)B=1+zB2(z)z
B(z)=1−1−4z−−−−−√2z
Extraindo os rendimentos do coeficiente
[zn]B(z)=1n+1(2nn).
As classes e concordam com as contagens, porque uma árvore binária com nós internos possui folhas, portanto, nós no total.ABnn+12n+1
No último caso, temos que trabalhar um pouco mais:
que é uma descrição de tentativas binárias removidas não vazias. Estendemos isso para
CD={∙}∪({∙}×C)∪({∙}×C)∪({∙}×C×C)={ϵ}∪({∙}×C×C)
e reescrevê-lo com funções de geração
C(z)D(z)=z+2zC(z)+zC2(z)=1+zC2(z)
resolver as equações quadráticas
C(z)D(z)=1−2z−1−4z−−−−−√2z=1−1−4z−−−−−√2z
e volte mais uma vez
[zn]C(z)=1n+1(2nn)n≥1[zn]D(z)=1n+1(2nn)n≥0
Observe que a função geradora catalã é
E(z)=1−1−4z−−−−−√2
enumera a classe de árvores gerais . Essas são as árvores sem restrição no grau do nó.
E={∙}×SEQ(E)
Ele lê como: "Um objeto da classe de árvores gerais é um nó seguido por uma possível sequência vazia de árvores gerais".
E(z)=z1−E(z)
Com a Fórmula de Inversão Lagrange-Bürmann obtemos
[zn]E(z)=1n+1(2nn)
Então, provamos que existem tantas árvores em geral quanto árvores binárias. Não é de admirar que exista uma bijeção entre as árvores gerais e as binárias. A bijeção é conhecida como correspondência de rotação (explicada no final do artigo vinculado), que nos permite armazenar duas árvores gerais como uma árvore binária.
Observe que, se não distinguirmos os irmãos esquerdo e direito na classe , obteremos mais uma classe de árvores :CT
as árvores binárias unárias.
Eles também têm uma função geradora
no entanto, seu coeficiente é diferente. Você obtém os números de Motzkin
T={∙}×SEQ≤2(T)
T(z)=1−z−1−2z−3z2−−−−−−−−−−√2z
[zn]T(z)=1n∑k(nk)(n−kk−1).
Ah, e se você não gosta de gerar funções, há muitas outras provas também. Veja aqui , existe um em que você pode usar a codificação de árvores binárias como palavras Dyck e derivar uma recorrência de sua definição recursiva. Resolver essa recorrência também dá a resposta. No entanto, o método simbólico evita que você aconteça com a recorrência em primeiro lugar, pois trabalha diretamente com os projetos dos objetos combinatórios.