Existe uma estrutura de dados para manter uma lista ordenada que suporta as seguintes operações em tempo amortizado?
GetElement (k) : retorna o ésimo elemento da lista.
InsertAfter (x, y) : insira o novo elemento y na lista imediatamente após x.
Excluir (x) : remova x da lista.
Nas duas últimas operações, você pode assumir que x é fornecido como um ponteiro diretamente na estrutura de dados; InsertElement retorna o ponteiro correspondente para y. InsertAfter (NULL, y) insere y no início da lista.
Por exemplo, começando com uma estrutura de dados vazia, as seguintes operações atualizam a lista ordenada, como mostrado abaixo:
- InsertAfter (NULL, a) [a]
- InsertAfter (NULL, b) [b, a]
- InsertAfter (b, c) [b, c, a]
- InsertAfter (a, d) [b, c, a, d]
- Excluir (c) [b, a, d]
Após essas cinco atualizações, GetElement (2) deve retornar d, e GetElement (3) deve retornar um erro.
Respostas:
NÃO.
Fredman e Saks provaram que qualquer estrutura de dados que suporta essas operações requer pelo menos tempo amortizado por operaçãoΩ(logn/loglogn) . (Esta é a referência [1] no artigo de Dietz que você mencionou em seu primeiro comentário.) O limite inferior é válido nomodelo de computação de sonda de célulamuitopoderoso, que considera apenas o número de endereços de memória distintos acessados pela atualização e consulta algoritmos.
Sem algumas suposições adicionais sobre as operações de atualização e consulta, a estrutura de dados de Dietz é a melhor possível (pelo menos até fatores constantes).
fonte
Parece que o barreira foi superada modificando a análise da técnica do cronograma.Ω(lognloglogn)
O novo [inferior] limite ) foi provado para problemas semelhantes no modelo de célula-sonda [1]. Da leitura desse artigo; Entendo que esse limite também se aplica aoproblema derepresentação de lista.Ω(logn)
[1] Patrascu, Mihai e Erik D. Demaine. "Limites inferiores logarítmicos no modelo de sonda celular." SIAM J. Comput. 35, n. 4 (abril de 2006): 932–963. doi: 10.1137 / S0097539705447256.
fonte