Estou (tolamente, ao que parece) confiante de que a resposta a esta pergunta é não. Então, por que estou perguntando?
Porque o Dr. Aleksandar Prokopec da EPFL em seu curso de programação paralela introduz uma estrutura de dados para a qual ele afirma várias propriedades. Se essas propriedades se mantiverem, parece -me que deve ser possível construir uma árvore binária equilibrada em um tempo melhor que .
Eu não acredito nisso, então estou me perguntando onde está a falha no meu pensamento.
A estrutura de dados é a lista de árvores conc . Em sua forma padrão, parece uma árvore binária normal e vem com uma concat
operação que garante a invariante de que as subárvores esquerda e direita de qualquer nó nunca diferem na altura em mais de um. Como esperado, concat
tem complexidade .
Mas há uma variante de construtor da lista de árvores de concha chamada Append
lista. Essa variante permite diferenças temporárias de altura em subárvores de mais de um. Amortizado os anexos de tempo são reivindicados para esta variante.
Então parece anexar elementos devem ter uma complexidade de .
No entanto, é uma característica dessa variante que sempre que é uma potência de dois e termina com uma árvore binária equilibrada completa (contendo todos os elementos inseridos até o momento). Assim, enquanto desequilíbrios temporários são permitidos, a árvore fica equilibrada a cada potência de 2 inserções.
Nesta variante, uma nova classe de nós, denominada Append
nós, é introduzida e são esses nós cujas subárvores são permitidas diferem em altura em mais de um. No entanto, cada inserções todos esses nós temporários são eliminados.
A página da página da Wikipedia descreve o algoritmo de forma bastante sucinta (veja a descrição da estrutura de dados básica e o append
método em particular).
Então quando é uma potência de dois o nosso custo para a inserção de elementos é e construímos uma árvore binária equilibrada. Ou assim parece.
Em uma pergunta separada, perguntei efetivamente "se posso indicar o número de etapas de um algoritmo para determinados valores depor exemplo, para , Onde é um número inteiro, isso é suficiente para permitir que eu indique a complexidade de todos os valores de ? "
Vejo pela resposta de Yuval Filmus que a resposta é não, mas que "em muitos casos, esperaríamos ser monótono em . Nesse caso, a dedução é válida. "
Parece-me que, neste caso, se inserir elementos tem complexidade e todo Se eu tiver uma árvore binária balanceada, o custo de construir árvores binárias balanceadas com essa abordagem de variante de árvore de concha deve ser .
Então, o que há de errado aqui? Para ser sincero, não vejo o valor amortizadoacrescentar tempo reivindicado para esta variante. Percebo que muitas vezes as inserções custammas quando se olha o que está acontecendo com os Append
nós temporários , o custo total de inserção parece ser amortizado.
Se esse for o caso, a construção de nossa árvore binária equilibrada tem uma surpresa custo.
Desculpe por uma pergunta tão longa e desculpe por não entrar em detalhes sobre o algoritmo em questão - ao invés disso, você pode procurar na Wikipedia.
append
operação.