Problemas Clássicos de Ciência da Computação com Python
Descrição do livro
Problemas de ciência da computação aparentemente novos ou ímpares muitas vezes têm raízes em algoritmos clássicos, nas técnicas de programação e em princípios de engenharia. E as abordagens clássicas ainda são a melhor forma de solucioná-los! Compreender essas técnicas em Python faz com que o seu potencial para o sucesso se expanda nas áreas de desenvolvimento web, manipulação de dados, aprendizado de máquina e em outras áreas.
Problemas Clássicos de Ciência da Computação com Python permite aprimorar suas habilidades na resolução de problemas de ciência da computação usando Python, com cenários, exercícios e algoritmos consagrados pelo tempo. Você enfrentará dezenas de desafios de programação, os quais variam de tarefas simples como algoritmos de busca binária a clustering de dados usando k-means. Em particular, você apreciará a sensação de satisfação ao resolver problemas que conectam a ciência da computação com questões reais associadas a aplicativos, dados e desempenho, e até mesmo com o sucesso em sua próxima entrevista de emprego!
O que o livro contém:
algoritmos de busca;
técnicas comuns para grafos;
redes neurais;
algoritmos genéticos;
busca competitiva;
uso de dicas de tipo em todos os códigos.
Sumário
- Agradecimentos
- Sobre o autor
- Sobre a ilustração da capa
- Introdução
- Problemas pequenos
- 1.1 Sequência de Fibonacci
- 1.1.1 Uma primeira tentativa com recursão
- 1.1.2 Utilizando casos de base
- 1.1.3 Memoização para nos salvar
- 1.1.4 Memoização automática
- 1.1.5 Fibonacci simples
- 1.1.6 Gerando números de Fibonacci com um gerador
- 1.2 Compactação trivial
- 1.3 Criptografia inquebrável
- 1.3.1 Deixando os dados em ordem
- 1.3.2 Criptografando e descriptografando
- 1.4 Calculando pi
- 1.5 Torres de Hanói
- 1.5.1 Modelando as torres
- 1.5.2 Solucionando as Torres de Hanói
- 1.6 Aplicações no mundo real
- 1.7 Exercícios
- Problemas de busca
- 2.1 Busca em DNA
- 2.1.1 Armazenando um DNA
- 2.1.2 Busca linear
- 2.1.3 Busca binária
- 2.1.4 Um exemplo genérico
- 2.2 Resolução de labirintos
- 2.2.1 Gerando um labirinto aleatório
- 2.2.2 Miscelânea de minúcias sobre labirintos
- 2.2.3 Busca em profundidade
- 2.2.4 Busca em largura
- 2.2.5 Busca A*
- 2.3 Missionários e canibais
- 2.3.1 Representando o problema
- 2.3.2 Solução
- 2.4 Aplicações no mundo real
- 2.5 Exercícios
- Problemas de satisfação de restrições
- 3.1 Construindo um framework para problemas de satisfação de restrições
- 3.2 Problema de coloração do mapa da Austrália
- 3.3 Problema das oito rainhas
- 3.4 Caça-palavras
- 3.5 SEND+MORE=MONEY
- 3.6 Layout de placa de circuitos
- 3.7 Aplicações no mundo real
- 3.8 Exercícios
- Problemas de grafos
- 4.1 Mapa como um grafo
- 4.2 Construindo um framework de grafos
- 4.2.1 Trabalhando com Edge e Graph
- 4.3 Encontrando o caminho mínimo
- 4.3.1 Retomando a busca em largura (BFS)
- 4.4 Minimizando o custo de construção da rede
- 4.4.1 Trabalhando com pesos
- 4.4.2 Encontrando a árvore geradora mínima
- 4.5 Encontrando caminhos mínimos em um grafo com peso
- 4.5.1 Algoritmo de Dijkstra
- 4.6 Aplicações no mundo real
- 4.7 Exercícios
- Algoritmos genéticos
- 5.1 Background em biologia
- 5.2 Algoritmo genético genérico
- 5.3 Teste simples
- 5.4 Revendo SEND+MORE=MONEY
- 5.5 Otimizando a compactação de listas
- 5.6 Desafios para os algoritmos genéticos
- 5.7 Aplicações no mundo real
- 5.8 Exercícios
- Clustering k-means
- 6.1 Informações preliminares
- 6.2 Algoritmo de clustering k-means
- 6.3 Clustering de governadores por idade e longitude
- 6.4 Clustering de álbuns do Michael Jackson por tamanho
- 6.5 Problemas e extensões do clustering k-means
- 6.6 Aplicações no mundo real
- 6.7 Exercícios
- Redes neurais relativamente simples
- 7.1 Base biológica?
- 7.2 Redes neurais artificiais
- 7.2.1 Neurônios
- 7.2.2 Camadas
- 7.2.3 Retropropagação
- 7.2.4 Visão geral
- 7.3 Informações preliminares
- 7.3.1 Produto escalar
- 7.3.2 Função de ativação
- 7.4 Construindo a rede
- 7.4.1 Implementando os neurônios
- 7.4.2 Implementando as camadas
- 7.4.3 Implementando a rede
- 7.5 Problemas de classificação
- 7.5.1 Normalizando dados
- 7.5.2 Conjunto clássico de dados de amostras de íris
- 7.5.3 Classificando vinhos
- 7.6 Agilizando as redes neurais
- 7.7 Problemas e extensões das redes neurais
- 7.8 Aplicações no mundo real
- 7.9 Exercícios
- Busca competitiva
- 8.1 Componentes básicos de jogos de tabuleiro
- 8.2 Jogo da velha
- 8.2.1 Administrando os estados do jogo da velha
- 8.2.2 Minimax
- 8.2.3 Testando o minimax com o jogo da velha
- 8.2.4 Desenvolvendo uma IA para o jogo da velha
- 8.3 Connect Four
- 8.3.1 Peças do jogo Connect Four
- 8.3.2 Uma IA para o Connect Four
- 8.3.3 Aperfeiçoando o minimax com a poda alfa-beta
- 8.4 Melhorias no minimax além da poda alfa-beta
- 8.5 Aplicações no mundo real
- 8.6 Exercícios
- Problemas diversos
- 9.1 Problema da mochila
- 9.2 Problema do Caixeiro-Viajante
- 9.2.1 Abordagem ingênua
- 9.2.2 Avançando para o próximo nível
- 9.3 Dados mnemônicos para números de telefone
- 9.4 Aplicações no mundo real
- 9.5 Exercícios
- Glossário
- Outros recursos
- B 1 Python
- B 2 Algoritmos e estruturas de dados
- B 3 Inteligência artificial
- B 4 Programação funcional
- B 5 Projetos de código aberto convenientes para aprendizado de máquina
- Introdução rápida às dicas de tipo
- C 1 O que são dicas de tipo?
- C 2 Como é a aparência das dicas de tipo?
- C 3 Por que as dicas de tipo são úteis?
- C 4 Quais são as desvantagens das dicas de tipo?
- C 5 Obtendo mais informações
- Índice remissivo
Sobre o autor
David Kopec é professor-assistente de Ciência da Computação & Inovação no Champlain College em Burlington, Vermont. É autor de Dart for Absolute Beginners (Apress, 2014) e Classic Computer Science Problems in Swift (Manning, 2018).… Ver perfil completo ▶
Livros relacionados
Recursos
Opinião dos leitores
Victor A P O
O livro é muito bom, e o autor mostra domínio de quase todos os problemas abordados. Problemas Clássicos de Ciência da Computação com Python é uma forma de viajar a passeio para a cidade natal, revisitando os pontos turísticos que marcaram a infância (ok, tentei criar uma metáfora aqui, pra o tempo da graduação ;). Na minha opinião, o livro é pra quem tem um nível intermediário em Python, e conhecimentos avançados de programação. Em suma, é um livro de nível avançado. Acredito que o único ponto negativo tenha sido o fato de o autor usar anotações de tipo. Apesar dos esforços do autor em empregar o recurso pra ajudar, às vezes, acaba atrapalhando. Fato é que ele mesmo comenta isso na introdução. Por fim, expresso minha opinião: recomendo.
Israel G de O
O livro é excelente! Guia o leitor numa prática com uma quantidade boa de teoria. Atualizado e cheio de dicas úteis sobre Python. Recomendo fortemente para quem quer se aprimorar em Python, mesmo que já conheça os temas. Segundo meus colegas da área da ciência da computação, o livro vale muito a pena sim. Eu sou físico e cientista de dados, para mim está sendo muito produtivo e prazeroso estudar pelo livro.
Jorge L C
Estou gostando muito do livro. Além do aspecto matemático, comentando o tema abordado, implementa as propostas em Python. Recomendo.
Ronald B F
Uma excelente referência para ter na sua biblioteca, pois o livro traz muitos dos problemas clássicos da computação e seus códigos em Python. Didático, serve de consulta para os mais experientes e de estudo para os iniciantes.






