Estou procurando um algoritmo para mesclar duas árvores de pesquisa binária de tamanho e alcance arbitrários. A maneira óbvia de implementar isso seria encontrar subárvores inteiras cujo intervalo pode caber em um nó externo arbitrário na outra árvore. No entanto, o pior caso de tempo de execução para esse tipo de algoritmo parece estar na ordem de O(n+m)
onde n
e m
é o tamanho de cada árvore, respectivamente.
No entanto, me disseram que isso poderia ser feito em O(h)
, onde h
é a altura da árvore com a altura maior. E eu estou completamente perdido em como isso é possível. Eu tentei experimentar girar uma das árvores primeiro, mas girar uma árvore em uma espinha já é O (h).
ds.algorithms
ds.data-structures
tree
efritz
fonte
fonte
O(log n)
com uma simples função de nó de movimentação?n
. Somente árvores binárias completas ou completas têm uma altura logarítmica em relação ao número total de nós.Respostas:
No ArXiv: 1002.4248 , John Iacono e Özgür Özkan descrevem um algoritmo relativamente simples para mesclar duas árvores de pesquisa binária no tempo amortizado de ; a análise é a parte mais difícil. [ Atualização: Como Joe observa corretamente em sua resposta, esse algoritmo é devido a Brown e Tarjan.] Eles também descrevem uma estrutura de dados de dicionário mais complicada, baseada em listas de pulos tendenciosas, que suporta mesclagens no tempo amortizado de .O ( log n )O(log2n) O(logn)
Por outro lado, um limite de pior caso de é impossível. Considere duas árvores de pesquisa binária com nós, um armazenando números inteiros pares entre e , o outro armazenando números inteiros ímpares entre e . A mesclagem das duas árvores cria uma nova árvore de pesquisa binária que armazena todos os números inteiros entre e . Em qualquer dessas árvores, uma fração constante dos nós tem paridade diferente dos pais. (Prova: o pai de uma folha ímpar deve ser par.) Assim, a mesclagem das árvores pares e ímpares requer a alteração de ponteiros .n 2 2 n 1 2 n - 1 1 2 n Ω ( n )O(logn) n 2 2n 1 2n−1 1 2n Ω(n)
fonte
Você pode achar útil essa referência: Brown e Tarjan, um algoritmo de mesclagem rápida , no qual os autores mostram como mesclar árvores binárias balanceadas (AVL) em ideal para algoritmos baseados em comparação). e são os comprimentos das listas classificadas representadas pelas árvores de pesquisa binária e supõe-se que .O(nlogmn) m n m≥n
Você também pode ver uma discussão sobre diferentes técnicas para mesclar conjuntos ordenados na seção 11.5 deste documento, sobre árvores de pesquisa por dedo
fonte
Você pode mesclar árvores no pior caso,O(1) enquanto ainda suporta: inserir, excluir e pesquisar em .O(log n)
Brodal, Gerth Stølting, Christos Makris e Kostas Tsichlas. 'Listas classificadas por catenabilidade em tempo constante puramente funcional no pior dos casos' . Em Anais da 14ª Conferência sobre Simpósio Anual Europeu - Volume 14, 172–183. ESA'06. Londres, Reino Unido, Reino Unido: Springer-Verlag, 2006. [ PDF ]
fonte