Back home

Estrutura de Dados 2 - Comparação Rápida

Estruturas de dados — Uma comparação rápida (Parte 2)

Estruturas de dados - uma comparação rápida (parte 2) Estruturas de dados 2-comparação rápida

Comparação entre diferentes estruturas de dados — bigochheatsheet.com Comparação entre diferentes estruturas de dados - bigochheatsheet.com

Cada estrutura de dados tem sua própria maneira ou algoritmo diferente para classificar, inserir, localizar,… etc. Isto se deve à natureza da estrutura de dados. Existem algoritmos utilizados com estrutura de dados específica, onde alguns outros não podem ser utilizados. Cada estrutura de dados possui seus próprios métodos ou algoritmos diferentes para classificação, inserção, pesquisa, etc. Alguns algoritmos possuem estruturas de dados específicas que outros algoritmos não podem usar.

Quanto mais eficiente e adequado for o algoritmo, mais você terá uma estrutura de dados otimizada. Quanto mais eficiente e apropriado for o algoritmo, mais estruturas de dados otimizadas serão obtidas.

Provavelmente, você dependerá dos algoritmos integrados usados ​​com as estruturas de dados em sua linguagem. Esses algoritmos são muito bem otimizados e testados em batalha. Muito provavelmente, você contará com algoritmos integrados que funcionam com estruturas de dados em sua linguagem. Esses algoritmos são bem otimizados e testados.

matrizes matrizes

prós Vantagens

  • Fácil de criar, fácil de usar Fácil de criar, fácil de usar

  • Indexação direta: O(1) Indexação direta: O(1)

  • Acesso sequencial: O(N) Acesso sequencial: O(N)

contras Desvantagens

  • Classificação: O(NLogN) Classificação: O(NLogN)

  • Pesquisando: O(N) e O(LogN) se classificado Pesquisando: O(N) e O(LogN) se classificado

  • Inserindo e excluindo: O(N) devido à mudança de itens.

lista vinculada lista vinculada

prós Vantagens

  • Inserindo e excluindo: O(1). Inserindo e excluindo: O(1)

  • Acesso sequencial: O(N) Acesso sequencial: O(N)

As operações de inserção e exclusão referem-se à operação em si, pois pode ser necessário acessar sequencialmente todos os nós até o nó que você está procurando.

Inserir e excluir é muito mais fácil com lista duplamente vinculada.

contras Desvantagens

  • Sem acesso direto; Apenas acesso sequencial. Sem acesso direto; Apenas acesso sequencial.

  • Pesquisando: O(N) Pesquisando: O(N)

  • Classificação: O(NLogN) Classificação: O(NLogN)

Pilhas e filas Pilhas e filas

Pilhas e filas têm finalidades muito específicas. As pilhas são a estrutura de dados último a entrar, primeiro a sair (LIFO), enquanto as filas são o primeiro a entrar, primeiro a sair (FIFO). Pilhas e filas servem a propósitos muito específicos. A pilha é uma estrutura de dados último a entrar, primeiro a sair (LIFO), enquanto a fila é uma estrutura de dados primeiro a entrar, primeiro a sair (FIFO).

prós Vantagens

  • Empurrar/Adicionar: O(1)
  • Abrir/Remover: O(1)
  • Espiar: O (1)

Contras

Se você estiver tentando fazer qualquer outra coisa com pilhas ou filas, por exemplo, se estiver perguntando como posso puxar um item do meio? Então, você deve observar uma estrutura de dados diferente. Se você quiser fazer mais alguma coisa com uma pilha ou fila, por exemplo, se quiser saber como extrair um item do meio? Então você deve observar as diferentes estruturas de dados.

Tabelas de hash. Tabela hash

prós Vantagens

  • Inserção e exclusão: O(1) + Hashing e Indexação (amortizado). Inserindo e excluindo: O(1) + Hashing e Indexação (amortizado).

  • Acesso direto: O(1) + Hashing e Indexação. Acesso direto: O(1) + Hashing e Indexação.

É necessário um pouco de processamento para hash e indexação. Mas o bom disso é que sempre há a mesma quantidade de processamento, mesmo que a tabela hash fique muito grande. Hashing e indexação exigem algum processamento. Mas a vantagem disso é que o número processado a cada vez é o mesmo, mesmo que a tabela hash se torne muito grande.

Quando a tabela hash ficar cheia, seu tamanho aumentará. E, quando o número de baldes preenchidos for muito menor que o tamanho da tabela hash, seu tamanho diminuirá. Ambas as operações assumem uma complexidade de O(N). É por isso que a inserção e a exclusão levam O(1) a ser amortizadas. Quando a tabela hash é preenchida, seu tamanho aumenta. Quando o número de baldes preenchidos é muito menor que o tamanho da tabela hash, seu tamanho é reduzido. A complexidade de ambas as operações é O(N). É por isso que a inserção e a exclusão requerem amortização O(1).

contras Desvantagens

  • Algumas despesas gerais exigem um pouco mais de espaço na memória do que arrays. Algumas despesas gerais exigem um pouco mais de espaço na memória do que matrizes.

  • A recuperação de elementos não garante uma ordem específica. A recuperação de elementos não garante uma ordem específica.

  • Procurando um valor (sem saber sua chave). Procurando um valor (sem saber sua chave).

conjuntos conjuntos

prós. Vantagens

  • Verificando adesão; existência de valor. Verificação de adesão; existência de valor.

  • Evita duplicatas, evite duplicação

A complexidade de verificar se um valor contido no conjunto depende da estrutura de dados subjacente usada para implementar o conjunto.

Em C++, ele usa uma árvore de pesquisa binária (provavelmente uma árvore vermelha e preta; um tipo de árvore de pesquisa binária com equilíbrio automático). Portanto, a complexidade seria O(LogN) e O(N) se a árvore estiver desequilibrada. A complexidade é O(LogN) se a árvore estiver desequilibrada, a complexidade é O(N)

Em Java, a classe HashSet implementa a interface Set usando a estrutura de dados da tabela hash. Portanto, a complexidade seria a mesma das tabelas hash (veja acima). Em Java, a classe HashSet implementa a interface Set usando uma estrutura de dados de tabela hash. Portanto a complexidade será a mesma de uma tabela hash (veja acima).

Contras

Os conjuntos são intencionalmente limitados. Não há muito que você possa fazer com eles. Então, eles são terríveis em quase todo o resto. As coleções são intencionalmente limitadas. Não há nada que você possa fazer sobre eles. Então, eles são terríveis em quase todos os outros aspectos.### Árvores de pesquisa binária (BST)

Prós

  • Inserindo e excluindo
  • Velocidade de acesso
  • Mantém a ordem classificada; a recuperação dos elementos está em ordem.

A complexidade de inserção, exclusão e acesso seria O(LogN) e O(N) se a árvore estiver desequilibrada.

Contras

  • Algumas despesas gerais devido à sua criação e gerenciamento.

Montes

Heaps são um tipo de árvore binária ótima para filas de prioridade. Heaps são um tipo de árvore binária ótima para filas de prioridade.

Prós

  • Encontrar mínimo/encontrar máximo: O (1)
  • Inserindo: O(LogN)
  • Excluir mínimo/excluir máximo: O (LogN)

Contras

  • Pesquisando e excluindo: O(N)

Na pesquisa e eliminação teremos que digitalizar todos os elementos pois não garantem uma ordem específica, ao contrário do BST.

A exclusão requer percorrer toda a árvore para acessar o elemento primeiro e, em seguida, excluí-lo, onde a própria operação de exclusão requer O (LogN).

Texto original: https://medium.com/omarelgabrys-blog/data-structures-a-quick-comparison-6689d725b3b0