Eu preciso de uma estrutura de dados para armazenar um número de elementos, cada um dos quais está associado a algum tempo diferente . varia e, embora tenha um limite superior teórico, há muitas ordens de magnitude maiores do que o que é normalmente usado.
Através da minha inscrição, posso garantir que:
Os elementos inseridos são sempre mais recentes que todos os elementos existentes, ou seja, se um elemento associado a um tempo é inserido, então . Os elementos são inseridos um por um.
Somente os elementos mais antigos são removidos, ou seja, se o elemento é removido, então . As remoções acontecem principalmente uma a uma, mas não há dano direto se a remoção de um elemento for atrasada, desde que a fração de elementos armazenados espuriosamente permaneça menor que 1.
Além de inserir e remover, a única coisa que preciso fazer é encontrar os dois elementos vizinhos por algum tempo com . Com outras palavras, preciso encontrar os dois elementos e modo que e ∄ l ∈ \ {1,…, n \}: t_j <t_l <t_k .
Meus critérios para a estrutura de dados são:
- A localização dos elementos descritos acima deve ser o mais rápido possível.
- A inserção e remoção deve ser rápida.
- A estrutura de dados é comparativamente simples de implementar.
Desde que não falemos de um pequeno deslocamento de tempo de execução, cada critério tem prioridade sobre o próximo.
Até agora, minha pesquisa resultou em que a resposta provavelmente é algum tipo de árvore de pesquisa com auto-equilíbrio, mas não encontrei nenhuma informação sobre qual delas é melhor para o caso de inserção ou exclusão unilateral, e provavelmente me custará um tempo considerável para me descobrir. Além disso, só encontrei informações incompletas sobre o quão bem as árvores se auto-organizam e com que rapidez (por exemplo, as árvores AVL se auto-organizam mais rigidamente do que as árvores vermelho-preto), sem falar em como isso é afetado pela inserção ou exclusão unilateral.