Projeto de Algoritmos com Implementações em Pascal e C

Um projeto de Nivio Ziviani, Ph.D. Professor Emérito do Departamento de Ciência da Computação Universidade Federal de Minas Gerais

Editora: Pioneira Thomson


| Apresentação

Al-Khorezmi nunca pensou que seu apelido, que significa "um nativo de Khorezmi", seria a origem de palavras mais importantes do que ele mesmo, como álgebra, logaritmo e algoritmo. Graças a esse pouco conhecido matemático árabe do século IX, hoje temos conhecimento de conceitos tão básicos quanto o número zero da Índia ou boa parte da matemática desenvolvida na Grécia.

E sobre algoritmos? Algoritmos e estruturas de dados formam o núcleo da ciência da computação, sendo os componentes básicos de qualquer software. Ao mesmo tempo, aprender como programar está intimamente ligado a algoritmos, já que um algoritmo é a abstração de um programa. Logo, aprender algoritmos é crucial para qualquer pessoa que deseja desenvolver software de qualidade.

Paradigmas de programação estão naturalmente associados a técnicas de projeto e disciplinas introdutórias de ciência da computação são usualmente disciplinas de introdução a algoritmos. Inicialmente, a concepção de algoritmos necessita apenas de técnicas básicas de programação. Quando a complexidade dos problemas e sua análise tornam-se importantes, como no caso deste livro, algoritmos requerem lógica, matemática discreta e alguma fundamentação teórica do tipo teoria de autômatos e linguagens formais.

Entretanto, aprender algoritmos não é fácil, uma vez que precisamos ter a combinação correta de conhecimentos matemáticos e de bom senso. Citando Knuth: a melhor teoria é inspirada na prática e a melhor prática é inspirada na teoria. O balanceamento entre teoria e prática é sempre uma tarefa difícil.

Este livro, na sua segunda edição, mostra esse balanceamento entre teoria e prática. Os primeiros três capítulos lançam as bases necessárias para um bom projeto de algoritmos: técnicas de projeto, ferramentas de análise e estruturas de dados básicas. Em particular, o Capítulo 2, novo nesta edição, cobre os principais paradigmas de projeto de algoritmos que antes eram usados em outros capítulos para diferentes problemas. Paradigmas como indução, recursividade, divisão e conquista ou uso de heurísticas são essenciais a um bom projeto de algoritmos.

Os três capítulos seguintes cobrem os dois problemas algorítmicos mais importantes: ordenação e pesquisa. Para ambos os casos, versões para memória primária e secundária são consideradas. Ordenação e pesquisa em memória secundária formam os pilares para bancos de dados.

Os próximos dois capítulos cobrem dois tipos de estruturas de dados muito importantes: grafos e cadeias. Grafos ocorrem em muitas aplicações práticas. Por outro lado, a pesquisa e a compressão de cadeias de caracteres formam a base para o processamento de documentos e, ultimamente, para as máquinas de busca da Web.

O capítulo final cobre problemas de grande complexidade computacional, em que todos os algoritmos conhecidos requerem tempo exponencial. Uma alternativa para esse problema é encontrar soluções com erro limitado, obtendo o que é chamado de algoritmo aproximado. Assim, trocamos a qualidade da resposta pelo menor tempo de processamento.

Esses três últimos capítulos também são novos, ampliando o escopo deste livro. Além disso, novos exercícios foram incluídos, muitos com soluções, tornando todo o conteúdo um recurso de ensino muito valioso, um verdadeiro livro-texto.

Acredito que este livro já é um clássico no Brasil. Esta nova edição vai fortalecer essa posição para o benefício de todos os professores e estudantes relacionados com o mundo dos algoritmos.

Ricardo Baeza-Yates
Santiago, Chile
Dezembro de 2003


Produzido por Tambor Comunicação