As estruturas de dados de pesquisa probabilística são úteis?

9

Um SkipList fornece os mesmos limites para pesquisa como uma árvore equilibrada com a vantagem de que o reequilíbrio não é necessário. Como o SkipList é construído usando lançamentos aleatórios de moedas, esses limites são válidos apenas enquanto a estrutura do SkipList estiver suficientemente "equilibrada". Em particular, com probabilidade 1 / n c para alguma constante c > 0 , a estrutura balanceada pode ser perdida após a inserção de um elemento.O(registron)1 1/ncc>0 0

Digamos que eu queira usar uma lista de pulos como back-end de armazenamento em um aplicativo Web que potencialmente é executado para sempre. Portanto, após um número polinomial de operações, é provável que a estrutura equilibrada do SkipList seja perdida.

Meu raciocínio está correto? Essas estruturas probabilísticas de dados de pesquisa / armazenamento têm aplicações práticas? Em caso afirmativo, como é evitado o problema acima?

Edit: Estou ciente de que existem variantes determinísticas do SkipList, que são muito mais complicadas de implementar em comparação com o SkipList aleatório (clássico).

alguém
fonte
11
Que aplicação específica você tem em mente?
Pratik Deoghare

Respostas:

6

Não acho que exista uma probabilidade polinomial de perder o 'equilíbrio'. Depois de inserir um elemento em uma lista de ignorados, você constrói uma torre de cópias acima dele, lançando uma moeda até que ela apareça.

Portanto, você tem camadas com menos e menos elementos à medida que chega ao topo. Como uma torre tem altura com probabilidade 2 - k , existe um elemento na altura k com probabilidade (limite de união) menor que n / 2 k . Portanto, ter um elemento no nível c log n provavelmente tem menos de 1 / n c . Torres de altura ω ( log n ) têm probabilidade subpolinomial. Seja M o nível máximo, então temosk2-kkn/2kcregistron1 1/ncω(registron)M

E[M]=k1 1Pr(Mk)registro(n)+kregistro(n)n/2k=registro(n)+2)

Além disso, no nível existem n / 2k elementos com probabilidade muito alta, já que esta é a soma de n variáveis aleatórias independentes e você pode usar Chernov do obrigado.n/2kn

Como você também pode mostrar que você executa apenas um número constante de etapas por nível (com probabilidade muito alta!), Os custos de pesquisa são logarítmicos.

Então você teria que ser muito azarado para terminar com uma lista desequilibrada. Observe que 'sorte' aqui é independente dos seus dados, diferente de, por exemplo, em árvores de pesquisa desequilibradas. Os lançamentos de moeda nas Skip Lists são sempre aleatórios.

Até onde eu sei, as listas de pulos são de grande interesse prático, porque é relativamente fácil implementá-las como estruturas de pesquisa sem bloqueio, com os benefícios óbvios. As árvores B, por outro lado, são bastante difíceis de obter desempenho sob acessos simultâneos.

adrianN
fonte
A profundidade esperada das árvores de pesquisa binária também é logarítmica; por que a situação é melhor aqui? (Além disso, você assume permutações aleatórias, correto?)
Raphael
2
Nas árvores de pesquisa, a profundidade depende dos dados. Se você alimentá-lo com números aleatórios, ele possui profundidade logarítmica com probabilidade muito alta. No entanto, na prática, os dados não são aleatórios. As listas de ignorados não usam os dados como fonte de aleatoriedade, portanto esse problema não existe.
precisa saber é o seguinte
1

As listas de ignorados têm outras propriedades que podem torná-los atraentes em situações em que são utilizadas operações além de apenas inserir / pesquisar / excluir.

O(1 1)O(1 1) pior caso, com certas árvores de pesquisa binária equilibrada, mas essas estruturas tendem a ser bastante complicadas de implementar.

Além disso, as listas de pular têm sido uma maneira popular de implementar estruturas de pesquisa simultâneas baseadas em comparação. Historicamente, as árvores de pesquisa balanceada não tiveram um bom desempenho sob alta disputa simultânea.

jbapple
fonte