Estou lutando com o hash e o material da árvore de pesquisa binária. E li que, em vez de usar listas para armazenar entradas com os mesmos valores de hash, também é possível usar árvores de pesquisa binária. E tento entender qual é o pior e o tempo médio de execução das operações
insert
,find
edelete
vale a pena. caso médio. Eles melhoram com relação às listas?
Respostas:
Para listas, inserção, localização e exclusão estão respectivamente em , , . A lista ordenada é pior. A pesquisa binária em si é para matrizes classificadas, nas quais as operações estão em , , . Se você deseja operações de "inserção" e "exclusão", precisará de mais do que apenas pesquisa binária.O(1) O(n) O(n) O(n) O(logn) O(n)
Você provavelmente quer algo como árvores de pesquisa binária . É muito mais fácil encontrar referências sobre isso depois de ter a terminologia adequada. Essas operações estão em pior das hipóteses, por exemplo, para implementações usando árvores AVL e árvores preto-vermelho .O(logn)
fonte
Na pior das hipóteses, se você armazenar apenas elementos com os mesmos valores de hash, uma tabela de hash armazenará todos os elementos no mesmo bucket. Se você usar listas para armazenar os elementos de um bucket, a pesquisa será no pior caso (onde é o número de elementos na tabela - geralmente, é o número de elementos no maior bucket), porque você precisa percorrer a lista inteira se estiver procurando um elemento que não esteja na tabela. A pesquisa positiva (onde você sabe que o elemento está presente) tem a mesma complexidade: você precisa de se estiver pesquisando o último elemento da lista. A exclusão tem a mesma complexidade (você precisa deO(n) n n n−1=Θ(n) n−1 pesquisas se você estiver excluindo o último elemento). A inserção também é se você precisar verificar um elemento existente ou se você permitir duplicatas (nesse caso, você pode inserir o elemento no início da lista).O(n) O(1)
Com as árvores de pesquisa binária balanceada , a complexidade do pior caso é reduzida para , porque a profundidade de uma árvore de pesquisa balanceada cresce logaritmicamente no tamanho da árvore, por definição de balanceamento.O(logn)
Com uma distribuição média de dados, os elementos são espalhados por diferentes buckets e há poucas colisões, portanto, a complexidade é próxima de independentemente da estrutura de dados usada em caso de colisão.O(1)
Com pesquisas aleatórias em uma distribuição de dados escolhida pelo adversário na qual todos os elementos estão no mesmo bloco, o comprimento médio da lista que deve ser percorrida é , portanto, a complexidade média da pesquisa nessa situação é . Com uma árvore, a média é , como no pior caso.n n/2 Θ(n) Θ(logn)
fonte