Entendendo Algoritmos é um livro excepcional do autor Aditya Y. Bhargava, sendo muito recomendado por pessoas de todos os niveis dentro do desenvolveimento, alem de ser um livro totalmente didatico com exemplos platicos e totalmente visual em seus exemplos e explicações.
Para quem quiser conhecer um pouco mais do livro:
"Entendendo Algoritmos: Um Guia Ilustrado para Programadores e Outros Curiosos" de Aditya Y. Bhargava é uma introdução prática e visual aos algoritmos de computador, projetada para ser acessível tanto para programadores quanto para leigos interessados no funcionamento interno dos computadores. Abaixo está um resumo completo do livro:
-Introdução
O livro começa com uma introdução aos algoritmos, explicando o que são e por que são importantes. Um algoritmo é definido como uma sequência de instruções passo a passo para resolver um problema. O autor destaca a importância de compreender algoritmos para escrever programas eficientes e eficazes.
-Capítulo 1: Pesquisa Binária O primeiro algoritmo abordado é a pesquisa binária. O livro explica como a pesquisa binária é usada para encontrar um item em uma lista ordenada, dividindo repetidamente a lista ao meio. Comparado com a pesquisa linear, a pesquisa binária é muito mais eficiente, especialmente para listas grandes.-Capítulo 2: Ordenação por Seleção Este capítulo cobre a ordenação por seleção, um algoritmo simples para ordenar uma lista. O algoritmo seleciona repetidamente o menor elemento da lista e o coloca na posição correta. Embora fácil de entender, a ordenação por seleção não é a mais eficiente para listas grandes.
-Capítulo 3: Complexidade de Algoritmos Aqui, o autor introduz a análise de complexidade de algoritmos, explicando Big O notation, que é usada para descrever o desempenho e a eficiência de um algoritmo em termos de tempo e espaço. Exemplos de notações incluem O(1), O(log n), O(n), O(n log n) e O(n²).
-Capítulo 4: Recursão A recursão é um conceito fundamental em ciência da computação, onde uma função chama a si mesma para resolver um problema. O capítulo inclui exemplos clássicos como a sequência de Fibonacci e a pesquisa em árvore.
-Capítulo 5: Estruturas de Dados Básicas Este capítulo apresenta estruturas de dados fundamentais, incluindo arrays, listas encadeadas, pilhas e filas. Cada estrutura é explicada com diagramas e exemplos de código para mostrar como armazenar e manipular dados de maneira eficiente.
-Capítulo 6: Pesquisa em Largura e em Profundidade O autor aborda dois algoritmos de busca em grafos: a pesquisa em largura (BFS) e a pesquisa em profundidade (DFS). Ambos são usados para explorar grafos e árvores, mas com abordagens diferentes. O BFS usa uma fila para explorar os nós nível a nível, enquanto o DFS usa uma pilha para explorar os nós profundamente antes de retroceder.
-Capítulo 7: Algoritmos de Ordenação Diversos algoritmos de ordenação são discutidos, incluindo ordenação por inserção, ordenação rápida (quicksort) e ordenação por mesclagem (mergesort). O capítulo compara a eficiência desses algoritmos e destaca os cenários em que cada um é mais adequado.
-Capítulo 8: Tabelas de Hash As tabelas de hash são introduzidas como uma estrutura de dados eficiente para armazenar pares chave-valor. O autor explica o conceito de funções hash, colisões e técnicas de resolução de colisões, como encadeamento e endereçamento aberto.
-Capítulo 9: Algoritmos de Pesquisa de Grafos Avançados Algoritmos mais avançados de pesquisa em grafos, como o algoritmo de Dijkstra para encontrar o caminho mais curto em um grafo ponderado, são discutidos. O autor explica como esses algoritmos podem ser aplicados a problemas do mundo real, como encontrar a rota mais curta em um mapa.
-Capítulo 10: Algoritmos de Programação Dinâmica A programação dinâmica é uma técnica poderosa para resolver problemas complexos ao dividi-los em subproblemas menores e reutilizar soluções já calculadas. Exemplos incluem a solução do problema da mochila e a subsequência comum mais longa.
-Conclusão O livro conclui enfatizando a importância de praticar a implementação e o uso de algoritmos para melhorar suas habilidades de programação. O autor encoraja os leitores a continuar aprendendo e explorando algoritmos mais avançados e suas aplicações.
-Estilo e Abordagem "Entendendo Algoritmos" é conhecido por seu estilo visual, com muitas ilustrações e diagramas que tornam os conceitos abstratos mais tangíveis. A linguagem é clara e acessível, com muitos exemplos práticos e explicações passo a passo.
Em resumo, "Entendendo Algoritmos" é uma excelente introdução ao mundo dos algoritmos, combinando teoria e prática de maneira envolvente e compreensível.
--conteudo gerado no ChatGPT.
Os tópicos principais do livro são:
- Introdução aos Algoritmos: Explica o que são algoritmos, por que são importantes e como eles são utilizados na computação.
- Estruturas de Dados Básicas: Aborda listas, pilhas, filas e árvores, e como elas são usadas para armazenar e organizar dados.
- Algoritmos de Ordenação e Busca: Discute algoritmos clássicos como a ordenação por bolha, seleção, inserção, mergesort, quicksort e algoritmos de busca binária.
- Algoritmos de Grafos: Inclui uma introdução a grafos e algoritmos relacionados, como o algoritmo de Dijkstra para encontrar o caminho mais curto.
- Algoritmos de Recursão: Explica o conceito de recursão e como é usado para resolver problemas complexos de maneira mais simples.
- Algoritmos Avançados: Cobre temas mais avançados como algoritmos de programação dinâmica, a exemplo do problema da mochila, e técnicas de otimização.
Este livro é uma excelente escolha para quem deseja compreender melhor os fundamentos dos algoritmos e como eles se aplicam na prática.
Aqui vou postar alguns codigos que será feito somente em JavaScritp se basearam nos exercicios e nos exemplos abordados no livro, mas fiz apenas para brincar e entender mais sobre cada exercicio e conceito abordado. Nada melhor que a pratica para absorver cada conceito.
Um detalhe muito importante em qualquer aprendizado é a importância de criar e fazer as coisas da sua própria mente! Estou seguindo o roteiro do livro, mas alguns algoritmos que estão nesse repositório são de minha autoria. Utilizo o ChatGPT somente para me auxiliar na construção dos algoritmos e recomendo fortemente que você, que chegou a esse repositório, faça o mesmo! Fazendo dessa forma, aprendi mais sobre a linguagem que escolhi estudar, no caso desse repositório, o JavaScript, e a estrutura de como são desenvolvidos os algoritmos e as peculiaridades da linguagem. Recomendo fortemente que faça o mesmo!!!
Quando se lê um algoritmo, se entende o que ele faz. Quando se estuda um algoritmo executando, debugando passo a passo e fazendo anotações, se aprende como ele funciona. Quando se faz um algoritmo, você transcende.
-enjoy! 🫰🏻