Review do Livro “50 Algorithms Every Programmer Should Know – 2nd edition”

Capa do livro - 50 algoritmos que todo desenvolvedor deve conhecer
Capa do livro - 50 algoritmos que todo desenvolvedor deve conhecer

Review do livro “50 Algorithms Every Programmer Should Know – 2nd edition“, que foi escrito por Imran Ahmad e publicado pela Packt Pub. Neste livro você aprenderá (ou relembrará) 50 algoritmos que deve conhecer na ciência da computação. Contudo, é uma versão atualizada, contando inclusive com assunto atuais como Large Language Models e discussões sobre transparência e ética nos algoritmos.

O livro e com seus 50 algoritmos que deve conhecer

Vou compartilhar minhas impressões desta obra, e já de partida quero avisar que nem todos os algoritmos são para todos nós. Digo isso porque há uma amplitude de assuntos que, dependendo do que você trabalha ou estuda, não vão lhe chamar muita atenção. No meu caso, o capítulo 3 é de ordenação e o capítulo 14 que é de criptografia… Não são exatamente os assuntos que mais me chamam atenção e acabei passando rapidamente por ali. Porém, a seção II que é de Machine Learning eu li com muito mais atenção, como também o capítulo 16.

Com uma abordagem direta em cada capítulo, o livro ensina de forma prática (programando em Python) como aplicar o que está estudando. É bem balanceado entre teoria e prática, certamente o que é bom para materializar a teoria na prática. O livro está organizado em 16 capítulos separados em três seções, e trás os 50 algoritmos que deve conhecer.

Vamos aos capítulos…

Cap 1 – Visão geral de algoritmos

No capítulo 1 mergulhamos no universo dos algoritmos. É uma introdução aos seus fundamentos, mostrando como eles são essenciais desde a formulação de problemas até a execução de soluções. O capítulo destaca a evolução do uso dos algoritmos e suas limitações. Para os entusiastas de Python, tem um guia de como preparar o ambiente para rodar os exemplos do livro, mas se você quiser ver isso em vídeo, gravei essa playlist há algum tempo. E não para por aí: o capítulo também aborda como medir e comparar o desempenho dos algoritmos. É um começo importante para quem quer entender a base do que vem a seguir no livro.

Cap 2 – Estruturas de dados

No capítulo 2 a conversa é sobre as estruturas de dados e como elas são a espinha dorsal de algoritmos. O capítulo, de fato, é um prato cheio para quem usa Python, detalhando como a linguagem gerencia estruturas de dados complexas e quais são as mais indicadas para cada tipo de dado. Mas não se preocupe se você é fã de Java ou C++, os conceitos são universais e vão te ajudar independentemente da linguagem que você curte programar. É o tipo de capítulo que faz você querer mergulhar no código e ver a mágica acontecer.

Cap3 – Ordenação e Busca

E aí, no capítulo 3, é apresentada a parte de algoritmos de ordenação e busca. O capítulo, a princípio, trás diferentes abordagens e tipos de algoritmos de ordenação, cada um com seu próprio estilo e estratégia de solução de problema. E para não deixar a busca de lado, tem exemplos práticos que mostram como esses algoritmos percorrem atrás dos dados.

Cap 4 – Projetando algoritmos

Chegando no capítulo 4, a gente entra na parte de Projetando Algoritmos. O capítulo, antes de mais nada, é uma verdadeira aula sobre como dar vida aos algoritmos, começando (obviamente) por entender o problema que você quer resolver. E para deixar tudo mais interessante, ocasionalmente, relembra o famoso Problema do Caixeiro Viajante (TSP), muito visto em cursos de Ciência da COmputação, e joga na mesa como um exemplo real de como aplicar essas técnicas de design. E não para por aí, ainda tem um pouco de programação linear para materializar a discussão com suas aplicações práticas. O capítulo faz bem o papel de ponte entre a teoria e a prática.

Cap 5 – Grafos

No Capítulo 5, a parada é nos Algoritmos de Grafos. O capítulo é um guia que mostra como navegar em grafos para representar estruturas de dados. Ele não só cobre o básico, mas também detalha teorias e técnicas mais profundas, como análise de redes e busca de grafos. E para colocar a teoria em prática, há um estudo de caso que usa grafos para desvendar fraudes.

Cap 6 – Aprendizado não supervisionado

Aqui no capítulo 6, sobretudo, começam os assuntos de Machine Learning, e esses eu li com muito mais carinho e dedicação por questões óbvias, ao propósito, de interesse pessoal 🙂

Este capítulo fala sobre o aprendizado de máquina não supervisionado. O capítulo é um convite para explorar como essa área do aprendizado de máquina pode ser usada para decifrar problemas do cotidiano. Ao mesmo tempo é apresentada uma introdução aos principais algoritmos e metodologias, como os de agrupamento, que encontram dados semelhantes; redução de dimensionalidade, que simplifica a complexidade diminuindo o espaço de busca; e de regras de associação, que descobre relações ocultas entre eventos e transações.

Cap 7 – Aprendizado Supervisionado

Neste capítulo a gente coloca a mão na massa com aprendizado supervisionado. O capítulo tem laboratório, onde são explorados os algoritimos de classificação e regressão. O Autor explica seis algoritmos de classificação e três de regressão, ele não só apresenta, mas também coda com esses algoritmos resolvendo problemas reais. E no final ainda compara os resultados para ver o que teve melhor performance.

Cap 8 – Redes Neurais Artificiais

No capítulo 8, antes de mais nada, o foco é pelo mundo das Redes Neurais. O capítulo abre as portas para os conceitos-chave e componentes que formam uma rede neural, explicando sobre suas várias formas e as funções de ativação. O algoritmo de backpropagation, peça central no treinamento de redes neurais, é explicado ems detalhes. Da mesma forma, no final do capítulo ainda tem um exemplo prático de como o Deep Learning pode ser usado para detectar documentos fraudulentos, trazendo a teoria para o chão da realidade.

Cap 9 – NLP Natural Language Processing

Aqui o autor aprofunda nos algoritmos para Processamento de Linguagem Natural (NLP). O capítulo é um guia completo que vai desde os fundamentos da NLP até a preparação dos dados para as tarefas mais complexas. Ele detalha o processo de vetorização de dados textuais e a técnica de incorporação de palavras. E, ao mesmo tempo, para não ficar só na teoria, apresenta um caso de uso detalhado mostrando como NLP se aplica no mundo real.

Cap10 – Modelos sequenciais

Aqui no capítulo 10, o autor leva a conversa sobre o treinamento de redes neurais para lidar com dados que seguem uma sequência. O capítulo serve como uma introdução aos modelos sequenciais, desvendando suas técnicas e metodologias. Ao mesmo tempo ainda tem uma discussão sobre como o Deep Learning pode elevar o nível das técnicas de Processamento de Linguagem Natural (que vimos no capítulo anterior). O capítulo te prepara para entender como as máquinas trabalham a partir de dados que têm uma ordem, um ritmo, uma cadência, e como isso pode revolucionar a maneira como interagimos com a tecnologia.

Cap11 – Modelos sequenciais avançados

O capitulo apresenta, contudo, limitações dos modelos sequenciais e descobre como eles têm evoluído para avançar na resolução de problemas. O autor mergulha nos aspectos mais sofisticados desses modelos, apresentando a criação de configurações que são verdadeiras “relíquias” em complexidade. Cobre assuntos como os autoencoders e modelos Sequence-to-Sequence (Seq2Seq), passando pelos mecanismos de atenção e transformers (attention is all you need), o capítulo prepara o terreno para os Large Language Models (LLMs), super atuais em questões de estado da arte da Inteligência Artificial.

Cap12 – Sistemas de Recomendação

Neste capítulo o assunto discutido são sistemas de recomendação (regras de associação), que parecem ler nossas mentes e sabem exatamente o que queremos antes mesmo de clicarmos. O capítulo explora os diferentes tipos de sistemas de recomendação e como eles funcionam por dentro, revelando tanto seus superpoderes quanto os desafios que enfrentam. E para fechar, o capítulo nos guia através de um problema do mundo real, mostrando como esses mecanismos podem ser a solução que estávamos procurando.

E é neste capítulo que se encerram os assuntos de Machine Learning!

Cap 13 – Tratamento de dados

Aqui o autor explica a arte de lidar com dados. O capítulo é um guia para entender os algoritmos de dados e os princípios que ajudam a resolver problemas de classificação de dados. Ele nos guia pelos algoritmos de armazenamento e compactação de dados, que são fundamentais para gerenciar informações de maneira eficiente. E como em qualquer boa estratégia, o capítulo nos mostra as vantagens e desvantagens de projetar e implementar algoritmos focados em dados.

Cap 14 – Criptografia

Confesso que passei bem rapido por aqui, não é um assunto que me atrai muito…

Mesmo assim, o capítulo apresenta uma visão histórica da criptografia antes de mergulhar nos algoritmos que guardam nossos segredos. O capítulo começa com os algoritmos de criptografia simétrica, (MD5 e SHA), apontando suas limitações e vulnerabilidades. Depois, avança para o mundo da criptografia assimétrica, essencial para a criação de certificados digitais que autenticam e protegem em operações online. E para amarrar tudo, o capítulo trás um exemplo prático mostrando como todas essas técnicas se encaixam no assunto de segurança digital.

Cap 15 – Algoritmo em grande escala

Neste capítulo o autor aborda algoritmos que operam em larga escala. O capítulo desvenda os bastidores para mostrar a infraestrutura necessária para dar suportar estas iniciativas. Apresenta também estratégias para gerenciar o processamento de múltiplos recursos, e as limitações impostas pela lei de Amdahl são examinadas (eu nem sabia que isso existia). E ao se falar em grande escala, não poderia faltar falar sobre as GPUs. Ele mostra seu papel no universo do processamento paralelo.

Cap 16 – Explicabilidade e Ética

O Capítulo 16 trás algumas considerações práticas, convidando a gente para o desafio de tornar os algoritmos transparentes e compreensíveis. O capítulo trata da explicabilidade dos algoritmos, ou seja, até que ponto podemos entender o que acontece por trás do código? A ética no uso dos algoritmos também entra em cena, com uma discussão sobre como evitar vieses que podem surgir na implementação. Além disso, o capítulo explora técnicas para lidar com os temidos problemas NP-difíceis e reflete sobre os fatores importantes na hora de escolher um algoritmo.

 

Minha opinião sobre estes 50 algoritmos que deve conhecer

Na minha humilde opinião o livro é completo e poderia facilmente servir de base complementar para cursos de graduação em ciência da computação. É um material útil para aprender ou aprimorar suas habilidades em algoritmos com Python.

Como comentei no começo do post, é leitura seletiva para quem se interessa pelos assuntos. Vale o investimento! Para mim, os capítulos entre 6 e 12, que falam de Machine Laerning, além do 16 que fala sobre transparência dos algoritmos, foram os que me chamaram mais atenção.
A versão digital está na Amazon por um pouco mais de 200 reais enquanto escrevo esse texto.

 

Códigos do “50 Algorithms Every Programmer Should Know – 2nd edition”

No Github da editora você pode acompanhar os códigos do livro e reproduzir o que estudou para fixar o aprendizado com os 50 algoritmos que todo desenvolvedor deve conhecer.

 

Bons estudos!

 

 

Sobre Diego Nogare 346 Artigos
Diego Nogare é Gerente Técnico de Engenharia de Machine Learning no Itaú-Unibanco. Também é professor em programas de pós graduação no Mackenzie e na FIAP, em São Paulo. Foi nomeado como Microsoft MVP por 11 anos seguidos, e hoje faz parte do programa Microsoft Regional Director.