Skip to content

gabrafo/Algoritmos-ED

Repository files navigation

Repositório de Estudos sobre Algoritmos e Estruturas de Dados

Bem-vindo ao repositório dedicado ao estudo e revisão de algoritmos e estruturas de dados! Este repositório é um projeto pessoal que visa aprofundar meu conhecimento na área, ao mesmo tempo que proporciona recursos e documentação útil para a comunidade.

Objetivo

O objetivo principal deste repositório é:

  • Revisitar e aprimorar o meu conhecimento em algoritmos e estruturas de dados.
  • Documentar o meu progresso e descobertas durante o estudo.
  • Compartilhar anotações, implementações e recursos que possam ser úteis para outros que estão aprendendo ou revisando esses conceitos.

Embora tenha sido inicialmente criado com base nas atividades e exercícios da disciplina de Estruturas de Dados da Universidade Federal de Lavras (UFLA), este repositório não está restrito à disciplina e poderá continuar sendo atualizado com novos conteúdos, mesmo após o término do meu período enquanto aluno da disciplina.

OBS: Alguns exemplos de código nas seções de implementação de algoritmos e estruturas de dados são baseados no livro Entendendo Algoritmos, mas há também muitos exemplos que eu mesmo desenvolvi. Além disso, pode ser que algumas das anotações não estejam 100% completas, não tratando todos os métodos das estruturas de dados.

Conteúdo

1. Anotações, Implementação e Documentação

  • Anotações em Markdown (MD) e em PDF: Incluem anotações extensas do material da disciplina de Estruturas de Dados (ED) da Universidade Federal de Lavras (UFLA), além de outros materiais de estudo (como o curso CS50 da Universidade de Harvard). Essas anotações estão sendo atualizadas conforme o avanço na compreensão dos temas, sendo que muitas delas contém representações visuais propostas por mim, como no arquivo Pilha.md.

  • Implementação e Documentação de Algoritmos: Explicações detalhadas dos algoritmos explorados no repositório, alguns advindos de Entendendo Algoritmos e outros desenvolvidos por mim. Alguns exemplos incluem:

    • Selection Sort
    • Quick Sort
    • Busca Binária
    • Busca Sequencial
  • Implementação e Documentação de Estruturas de Dados: Esta seção inclui explicações detalhadas sobre estruturas de dados, baseadas em minha experiência e nas aulas da disciplina de ED da UFLA. Alguns dos tópicos abordados são:

    • Vetores
    • Listas encadeadas
    • Grafos
    • Árvores AVL
    • Tabelas Hash
  • Exercícios do LeetCode: Além dos exercícios da disciplina, este repositório inclui também resoluções de problemas do LeetCode, uma plataforma online conhecida por suas questões desafiadoras de programação. Estes exercícios são uma excelente forma de praticar e aplicar os conceitos de algoritmos e estruturas de dados de forma prática e relevante para o mercado de trabalho.

  • Exercícios de Estruturas de Dados: A pasta de exercícios contém exemplos puramente da disciplina de ED, com correções automáticas feitas pelo juiz virtual da UFLA.

2. Recursos e Links Adicionais

  • Revisão: Listas, vetores e tabelas Hash: Videoaula gravada por mim sobre listas, vetores e tabelas Hash.

  • Curso CS50 da Harvard University: Curso gratuito de introdução à ciência da computação.

  • Estruturas de Dados (com C++): Playlist disponibilizada pela Universidade Federal de Lavras (UFLA), destinada à disciplina de Estruturas de Dados, com aulas ministradas pelo professor Joaquim Quintero Uchôa.

  • Exercícios e Projetos de Revisão:

    1. Algoritmos
    • Exercícios de Revisão 1: Exercícios de revisão para as provas da disciplina de Introdução aos Algoritmos, que prenuncia a disciplina de ED na UFLA. Esses exercícios incluem implementações de diversos algoritmos e algumas estruturas de dados.
    • Exercícios de Revisão 2: Mais exercícios de revisão para a mesma disciplina.
    • Projeto Prático com Shell Sort: Projeto prático da disciplina de Introdução aos Algoritmos, onde foi utilizado o Shell Sort para ordenação eficiente. Este projeto também contém implementações de vários algoritmos.
    1. Estruturas de dados
    • Projeto Prático implementando um Sequence Set: Projeto prático da disciplina de Estruturas de Dados, na qual busquei implementar um Sequence Set, acessando um CSV e o fragmentando em diversos arquivos binários. Também utilizei busca binária para auxiliar na inserção e busca de registros.

3. Aviso Legal

As das soluções disponibilizadas neste repositório são exclusivamente para fins acadêmicos, sendo que parte delas foi corrigida pelo juiz online da universidade como parte do processo de aprendizagem na disciplina de Estruturas de Dados.

Este repositório tem como objetivo estudar, revisar e compartilhar conhecimento sobre algoritmos e estruturas de dados. Não se destina a substituir ou "copiar" conteúdo oficial da universidade. Todos os exercícios aqui desenvolvidos foram implementados com o propósito de aprendizado individual.

É fortemente recomendado que os estudantes tentem resolver os exercícios por conta própria antes de consultar as soluções fornecidas aqui, para garantir um processo de aprendizado mais eficaz.

4. Agradecimentos

Gostaria de expressar meus sinceros agradecimentos aos professores da UFLA, especialmente aos professores Joaquim Quintero Uchôa, Juliana Greghi, Renato Ramos da Silva e a todos os outros educadores que fizeram parte da construção pedagógica das aulas de Estruturas de Dados e forneceram os conteúdos práticos e teóricos que serviram como base para o aprendizado documentado neste repositório.

5. Contribuições

Contribuições são bem-vindas! Se você deseja contribuir com o repositório, pode:

  • Adicionar novas implementações: Compartilhe suas próprias implementações de algoritmos em diferentes linguagens.
  • Melhorar a documentação: Faça sugestões para melhorar as anotações e a documentação existente.
  • Compartilhar recursos: Adicione links e referências a novos materiais de estudo que você achar úteis.

Para contribuir, por favor, siga estas etapas:

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

Contato

Para qualquer dúvida ou sugestão, sinta-se à vontade para abrir uma issue ou entrar em contato diretamente.

Releases

No releases published

Packages

No packages published