Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
PARTE 1: COMEÇANDO�������������������������������������������������������� 7
CAPÍTULO 1: Introduzindo Algoritmos �����������������������������������������9
Descrevendo Algoritmos��������������������������������������������������������������������������10
Definindo os usos dos algoritmos����������������������������������������������������12
Encontrando algoritmos em todo lugar������������������������������������������14
Usando Computadores para Resolver Problemas������������������������������15
Alavancando CPUs e GPUs modernas ��������������������������������������������16
Trabalhando com chips de propósito especial������������������������������17
Alavancando redes������������������������������������������������������������������������������18
Alavancando dados disponíveis��������������������������������������������������������19
Distinguindo Questões de Soluções ������������������������������������������������������20
Sendo correto e eficiente ������������������������������������������������������������������20
Descobrindo que não há almoço grátis������������������������������������������21
Adaptando a estratégia ao problema����������������������������������������������21
Descrevendo algoritmos em uma língua franca����������������������������21
Enfrentando problemas difíceis��������������������������������������������������������22
Estruturando Dados para Obter uma Solução ������������������������������������22
Entendendo o ponto de vista do computador ������������������������������22
Organizar dados faz a diferença ������������������������������������������������������23
Sumário xiii
Sumário xv
Sumário xvii
o Mundo������������������������������������������������������������������ 393
Usando Rotinas de Ordenação������������������������������������������������������������� 394
Procurando Coisas com Rotinas de Busca����������������������������������������� 395
Sacudindo as Coisas com Números Aleatórios��������������������������������� 395
Executando a Compressão de Dados������������������������������������������������� 396
Mantendo Dados Secretos ������������������������������������������������������������������� 396
Mudando o Domínio de Dados������������������������������������������������������������� 397
Analisando Links������������������������������������������������������������������������������������� 397
Encontrando Padrões de Dados ��������������������������������������������������������� 398
Lidando com Automação e Respostas Automáticas������������������������� 399
Criando Identificadores Únicos������������������������������������������������������������� 399
Sumário xix
ÍNDICE�������������������������������������������������������������������������������� 407
V
ocê precisa aprender sobre algoritmos, seja para a faculdade ou para o
trabalho. Mas todos os livros que tentou sobre o assunto acabam sendo
mais uma bela ajuda para cair no sono do que lições que realmente
ensinam alguma coisa. Supondo que consiga passar dos símbolos misteriosos
obviamente desenhados por uma criança de dois anos com uma queda por gar-
ranchos, você termina sem saber nem por que queria aprender sobre algoritmos.
A maioria dos livros de matemática são chatos! Porém, Algoritmos Para Leigos
é diferente. A primeira coisa que vai notar é que, neste livro, aqueles símbo-
los esquisitos (principalmente os do tipo garrancho) desapareceram. Sim, você
verá alguns (é um livro de matemática, afinal de contas), mas o que encontrará
mesmo são instruções claras sobre o uso de algoritmos, que realmente têm
nomes e uma história por trás, para executar tarefas úteis. Você encontrará
técnicas simples de codificação que fazem coisas maravilhosas, que vão intrigar
seus amigos e certamente deixá-los com inveja enquanto você realiza façanhas
matemáticas incríveis que eles não sabem nem por onde começam. Você con-
seguirá tudo isso sem derreter o cérebro e não vai nem cochilar (bem, a menos
que realmente queira).
»» Algoritmos que realmente têm um nome e uma base histórica, de modo que
seja possível lembrar do algoritmo e saber porque alguém gastou seu tempo
criando-o.
»» Explicações simples sobre como o algoritmo realiza façanhas incríveis de
manipulação e análise de dados e previsão de probabilidade.
»» Códigos que mostram como usar o algoritmo sem realmente lidar com
símbolos misteriosos que ninguém sem uma graduação em matemática
consegue entender.
Parte do foco deste livro está em usar as ferramentas certas. Este livro usa
Python para executar diversas tarefas. Python tem recursos especiais que
Introdução 1
É claro, você ainda pode se preocupar com toda a questão do ambiente de pro-
gramação, e este livro também não o deixará no escuro quanto a isto. No iní-
cio, você encontra instruções completas sobre a instalação do Anaconda, que é
o Ambiente Integrado de Desenvolvimento (IDE) da linguagem Python usada
neste livro. Além disso, guias rápidos (com referências) ajudam a entender o
básico da programação em Python, que será preciso executar. O foco é fazer
você pôr a mão na massa o mais rápido possível, e tornar os exemplos obje-
tivos e simples, de modo que o código não se transforme em um obstáculo ao
aprendizado.
»» Os textos que deverão ser digitados como aparecem neste livro estarão em
negrito. A exceção é quando estiver seguindo um passo a passo: como cada
passo aparecerá em negrito, os textos para digitar não estarão.
»» Palavras que desejamos que digite que também estiverem em itálico serão
usadas para reservar espaço, o que significa que precisará substituí-las
por algo que funcione para você. Por exemplo, se vir “Digite Seu Nome e
pressione Enter”, você precisará substituir Seu Nome pelo seu nome mesmo.
»» Também usaremos itálico para termos definidos por nós. Isso significa
que não precisará confiar em outras fontes para fornecer as definições
necessárias.
»» Endereços web e códigos de programação aparecerão em monofont.
»» Quando precisar clicar comandos em sequência, eles estarão separados por
uma seta especial, assim: File ➪ New File, o que significa que precisa clicar em
File, e depois em New File.
2 Introdução
A primeira suposição é que você está familiarizado com a plataforma que deseja
usar, pois este livro não fornece nenhuma orientação quanto a isso (no entanto,
o Capítulo 3 explica como instalar o Anaconda; o Capítulo 4 traz um panorama
básico da linguagem Python e o Capítulo 5 ajuda a entender como executar
manipulações de dados essenciais usando Python). Para apresentar o máximo
de informação sobre Python em relação aos algoritmos, este livro não discutirá
nenhuma questão específica sobre plataformas. Você realmente precisa saber
instalar e utilizar aplicações e trabalhar basicamente com a plataforma esco-
lhida antes de começar a trabalhar com este livro.
Este material não é um guia matemático. Sim, você verá vários exemplos de
matemática complexa, mas o foco está em ajudá-lo a utilizar Python para exe-
cutar tarefas comuns usando algoritmos, em vez de aprender teoria matemática.
Entretanto, você terá explicações sobre muitos dos algoritmos utilizados neste
livro para que possa entender como eles funcionam. Os Capítulos 1 e 2 o guiarão
para uma melhor compreensão do que é necessário saber exatamente para uti-
lizar este livro com sucesso.
A obra também parte do princípio que você pode acessar itens na internet. Várias
referências a materiais online que melhorarão sua experiência de aprendizado
estarão espalhadas por aí. Porém, esses recursos adicionais só serão úteis se
você realmente encontrá-los e utilizá-los.
Dicas são ótimas, pois ajudam a economizar tempo ou executar tarefas sem
muito trabalho extra. As dicas neste livro são técnicas para economizar tempo,
ou indicações de recursos que deve testar para se beneficiar ao máximo de
DICA Python, ou quando executar tarefas relacionadas a algoritmos ou análise de
dados.
Introdução 3
Sempre que ver este ícone, pense em alguma dica ou técnica avançada. Você
pode achar estas informações úteis muito chatas, ou elas podem conter a solu-
ção necessária para fazer um programa funcionar. Pule estas informações sem-
PAPO DE
ESPECIALISTA pre que desejar.
4 Introdução
Se for um iniciante que está com pressa para começar a trabalhar com algorit-
mos, pode pular para o Capítulo 3, compreendendo que pode achar alguns tópi-
cos um pouco confusos depois. Se já tiver o Anaconda instalado, pode apenas
passar os olhos pelo Capítulo 3. Para usar este livro, você deve instalar Python
na versão 3.4. Os exemplos não funcionarão com a versão 2.x de Python porque
essa versão não suporta alguns pacotes que utilizaremos.
Introdução 5
Capítulo 1
Introduzindo
Algoritmos
S
e você faz parte da maioria das pessoas, muito provavelmente está con-
fuso ao abrir este livro e iniciar sua aventura com os algoritmos, pois a
maior parte dos textos não explica o que é um algoritmo, muito menos
porque você iria querer usar um. Eles supõem que já saiba alguma coisa sobre
algoritmos e está lendo sobre eles para refinar e elevar seus conhecimentos.
Curiosamente, alguns livros, na verdade, trazem uma definição confusa de
algoritmo que, no final das contas, não define nada e, às vezes, até equipara-o a
alguma outra forma de expressão abstrata, numérica ou simbólica.
Descrevendo Algoritmos
Embora as pessoas tenham resolvido algoritmos manualmente por, literal-
mente, milhares de anos, fazer isso pode consumir uma enorme quantidade de
tempo e requer muitos cálculos numéricos, dependendo da complexidade do
problema que precisa ser resolvido. Algoritmos dizem respeito a encontrar solu-
ções, e quanto mais rápido e fácil, melhor. Existe uma grande distância entre os
algoritmos matemáticos historicamente criados por gênios de seu tempo, como
Euclides, Newton ou Gauss, e os algoritmos modernos criados em universidades
ou em laboratórios privados de pesquisa e desenvolvimento. A principal razão
para essa distância é o uso de computadores. Usar computadores para resolver
problemas empregando o algoritmo apropriado acelera a tarefa significativa-
mente, e é a razão pela qual o desenvolvimento de novos algoritmos progrediu
tão rapidamente desde o aparecimento de sistemas computacionais potentes.
Na verdade, você pode ter notado que soluções para problemas aparecem cada
vez mais rapidamente hoje, em parte, porque o poder computacional é barato
e evolui constantemente. Dada sua habilidade de resolver problemas usando
algoritmos, computadores (às vezes, sob a forma de hardwares especiais) estão
tornando-se onipresentes.
10 PARTE 1 Começando
Um dos usos mais comuns de algoritmos é como um meio para resolver fórmulas.
Por exemplo, quando trabalhar com o MDC de dois valores inteiros, é possível
executar a tarefa manualmente listando cada um dos fatores para os dois intei-
ros, e então selecionando o maior fator que for comum para ambos. Por exem-
plo, o MDC (20, 25) é 5 porque 5 é o maior número que divide tanto 20 quanto
25. No entanto, processar cada MDC manualmente (que, na verdade, é um tipo
de algoritmo) consome muito tempo e é suscetível a erros, então o matemá-
tico grego Euclides (https://pt.wikipedia.org/wiki/Euclides) criou um
algoritmo para executar a tarefa. Você pode ver o método euclidiano demons-
trado em https://pt.khanacademy.org/computing/computer-science/
cryptography/modarithmetic/a/the-euclidean-algorithm.
12 PARTE 1 Começando
Como nossa sociedade e a tecnologia que nos acompanha estão ganhando dina-
mismo, correndo cada vez mais rápido, precisamos de algoritmos que pos-
sam acompanhar o ritmo. Realizações científicas, como sequenciar o genoma
LEMBRE-SE
humano, foram possíveis em nossa era porque cientistas encontraram algo-
ritmos que rodam rápido o suficiente para concluir a tarefa. Determinar qual
algoritmo é o melhor em determinada situação, ou em uma situação média de
uso, é coisa séria, e tópico de discussão entre cientistas da computação.