Operações Eficientes em Arrays Dinâmicos

Bruno Monteiro

Representação de conjuntos é um problema extensivamente estudado. Porém, soluções canônicas com árvores binárias de busca não são trivialmente capazes de unir dois conjuntos eficientemente, ao mesmo tempo permitindo a separação de conjuntos por um dado valor. Estudamos uma estrutura de dados capaz de representar conjuntos de inteiros não-negativos e efetuar tais operações em tempo O(log U) amortizado, se U é o maior valor que podemos representar. Propomos também um novo tipo abstrato de dados que chamamos de Block-Sorted Array, e mostramos que com ele é possível representar arrays de inteiros não-negativos com operações de separar um array em dois em uma dada posição, concatenar, reverter e ordenar arrays, em tempo O(log n + log U) amortizado por operação, sendo n o número total de elementos representados e U o valor máximo representado. Por fim, definimos uma nova operação, chamada de Partition, que se trata de remover os k menores valores de um array, de forma ordenada. Mostramos uma implementação dessa operação usando o Block-Sorted Array, e conjecturamos que ela é efetuada em tempo sub-linear amortizado.


2021/1 - POC2

Orientador: Vinicius dos Santos

Palavras-chave: Estruturas de Dados, Algoritmos, Arrays, Conjuntos, Complexidade

Link para vídeo

PDF Disponível