Skip to content

VitorHugoAntunes/Data_Structure_Learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 

Repository files navigation

Estrutura de Dados - Repositório de Estudos

Bem-vindo ao meu repositório de estudos de estrutura de dados! Aqui, compartilho os meus aprendizados e práticas relacionados a estruturas de dados, um aspecto fundamental da programação e ciência da computação.

Conteúdo do Repositório

Estrutura de Dados 1

1. Tipos de dados

  • Entenda variáveis, tipos primitivos (inteiros, floats, booleanos, etc.) e como eles são armazenados.

2. Arrays e listas

  • Aprenda sobre arrays e listas, estruturas que armazenam elementos de forma sequencial.

3. Filas e Pilhas

  • Compreenda as filas (queues) e pilhas (stacks) e suas operações (enqueue, dequeue, push, pop).

4. Listas ligadas (linked lists)

  • Explore listas ligadas simples e duplamente ligadas, compreendendo suas características e operações.

5. Árvores

  • Introdução às árvores binárias, suas propriedades e operações.

6. Recursividade

  • Compreenda a recursividade, que é fundamental para muitas estruturas e algoritmos.

7. Árvores Binárias de Busca (BST)

  • Entenda árvores binárias de busca e suas propriedades.

8. Heap

  • Aprenda sobre heaps (binários, binomiais, Fibonacci) e suas operações (inserir, extrair mínimo/máximo).

9. Tabelas Hash

  • Introdução a tabelas hash, colisões e resoluções de colisões.

10. Grafos

  • Explore a teoria dos grafos, representações (matriz de adjacência, lista de adjacência) e algoritmos (DFS, BFS).

11. Algoritmos de ordenação

  • Compreenda algoritmos de ordenação (Bubble Sort, Insertion Sort, Merge Sort, Quick Sort).

12. Algoritmos de busca

  • Aprenda algoritmos de busca (linear, binária) e suas complexidades.

13. Árvores AVL e Árvores B

  • Estude árvores AVL para garantir balanceamento e árvores B para armazenamento eficiente em disco.

14. Grafos ponderados

  • Explore grafos ponderados, algoritmos de caminho mínimo (Dijkstra, Bellman-Ford) e árvores de abrangência mínima (Prim, Kruskal).

15. Estrutura de dados avançadas

  • Outras estruturas como Trie, Grafo Direcionado Acíclico (DAG), Union-Find.

16. Algoritmos avançados

  • Algoritmos mais complexos como algoritmos de fluxo máximo (Ford-Fulkerson, Edmonds-Karp) e algoritmos de casamento estável.

Estrutura de Dados 2

1. Filtros de bloom

  • São estruturas de dados probabilísticas usadas para testar se um elemento pertence a um conjunto, com um pequeno risco de falsos positivos.

2. Árvores de Fenwick (ou BIT - Binary Indexed Tree)

  • Especialmente úteis para cálculos de prefixos e atualizações eficientes em sequências de números.

3. Tabelas Hash Dinâmicas (Dynamic Hash Tables)

  • Abordagem mais avançada das tabelas hash que pode lidar com resizing e colisões de maneira mais eficiente.

4. Árvores de segmento

  • Estruturas eficientes para resolver problemas relacionados a intervalos em um conjunto de dados, como consultas de soma em um intervalo específico.

5. Fibonacci Heap

  • Uma variação de heap que oferece tempos de execução melhores em certos casos do que outras estruturas de heap.

6. Quad Trees e Oct Trees

  • Estruturas de dados espaciais usadas em gráficos computacionais e problemas relacionados a espaço tridimensional.

7. Estruturas de dados persistente

  • Estruturas de dados que mantêm versões antigas de si mesmas, o que é útil em situações onde você precisa rastrear alterações ao longo do tempo.

8. Estruturas de dados probabilísticas

  • Incluem estruturas como skip lists e treaps que oferecem eficiência em tempo médio, muitas vezes com complexidade de implementação menor do que estruturas determinísticas equivalentes.

9. B-Tree e B+Tree

  • Estruturas de dados usadas em bancos de dados e sistemas de arquivos para armazenamento eficiente em disco.

10. Cuckoo Hashing

  • Uma abordagem de hashing alternativa para evitar colisões, usando múltiplas funções de hash.

Linguagens Utilizadas

Os estudos e implementações são realizados em diversas linguagens, incluindo:

  • Java
  • C

Apesar de utilizar essas duas linguagens, o objetivo não é fazer todos os tópicos em C e em Java, pois muitos exemplos, como as pilhas e filas, são bem parecidos em questão de sintaxe, mudando poucos detalhes. As linguagens escolhidas são apenas para exemplificar e não repassar o mesmo conteúdo em ambas para evitar repetição. Apenas tópicos que são diferentes em ambas linguagens foram estudados utilizando as duas, como vetores e matrizes, que em Java temos uma abordagem diferente usando classes invólucros.

Como Contribuir

Sinta-se à vontade para contribuir com novos exemplos, correções ou sugestões. Basta seguir estas etapas:

  1. Faça um fork do repositório.
  2. Crie uma branch para a sua contribuição (git checkout -b sua-feature).
  3. Faça suas alterações e commit (git commit -m 'Adiciona nova feature').
  4. Faça push para a branch (git push origin sua-feature).
  5. Abra um pull request para revisão.

Observações

Este repositório é destinado a compartilhar conhecimento e práticas sobre estruturas de dados. Sinta-se à vontade para explorar, aprender e contribuir!

About

Collection of studies on Data Structure.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages