You are on page 1of 177
ee cons ee te Ms CINE ee a ae OT ees weed SHIT pone i prea pseu Introdug&o a teoria de 99238 UESC UESC 99238 ee erwT ers TRADUGAO DA SEGUNDA EDICAO AMERICANA Capitulo 1 Autématos: os métodos e a loucura A teoria de automatos € 0 estudo dos dispositivos de computacao abstratos, ou “maquinas”. Antes de existirem os computadores, na década de 1930, A. Turing estudou uma maquina abstrata que tinha todas as caracteristicas dos computa- dores atuais, pelo menos no que se refere ao quanto eles poderiam calcular. O objetivo de Turing era descrever com exatidao 0 limite entre o que uma maqui- na de computacdo podia fazer e aquilo que ela nao podia fazer; suas conclusoes se aplicam nao apenas as suas maquinas de Turing abstratas, mas também as ma- quinas reais de hoje Nas décadas de 1940 e 1950, tipos de maquinas mais simples, que hoje cha- mamos “automatos finitos”, foram estudados por diversos pesquisadores. Esses autOmatos, propostos originalmente para modelar a funcao do cérebro, se mos- traram extremamente titeis para uma grande variedade de outros propésitos, que mencionaremos na Seco 1.1. Também no final dos anos 50, o linguista N. Chomsky iniciou 0 estudo de “gramaticas” formais. Embora nao sejam estrita- mente maquinas, essas gramaticas tém relacionamentos estreitos com os auto- matos abstratos ¢ hoje servem como a base de alguns importantes componentes de software, incluindo algumas partes dos compiladores. Em 1969, S. Cook estendeu o estudo de Turing do que podia e do que nao podia ser calculado. Cook conseguiu separar os problemas que podem ser resol- vidos de forma eficiente por computadores daqueles problemas que podem em principio ser resolvidos mas que, na pratica, levam tanto tempo que os compu- tadores sdo imiteis para solucionar todas as instancias do problema, exceto aquelas muito pequenas. Os problemas dessa tiltima classe so chamados “in- trataveis” ou “NP-dificeis” (NP-hard). E altamente improvavel que até mesmo a melhoria exponencial na velocidade de computacao que o hardware de compu- tadores vem alcancando (“Lei de Moore”) tenha impacto significativo sobre nossa habilidade para resolver grandes instancias de problemas intrataveis. INTRODUCAO A TEORIA DE AUTOMATOS, LINGUAGENS E COMPUTACAO Todos esses desenvolvimentos tedricos tém relacdo direta com aquilo que os cientistas da computacao fazem hoje. Alguns conceitos, como automatos finitos e certos tipos de gramiaticas formais, s4o usados no projeto e na construcao de im- portantes componentes de software. Outros conceitos, como a maquina de Tu- ring, ajudam a entender o que podemos esperar de nosso software. Em especial, a teoria de problemas intrataveis nos permite deduzir se temos a chance de, ao nos depararmos com um problema, sermos capazes de escrever um programa para re- solve-lo (porque ele nao pertence a classe intratavel), ou se teremos de descobrir algum modo de contornar o problema intratavel: encontrar uma aproximacao, ‘usar uma heuristica ou empregar algum outro método para limitar 0 periodo de tempo que o programa despendera para resolver o problema. Neste capitulo introdutorio, comegaremos com uma visao de alto nivel do objeto de estudo da teoria dos automatos € de quais sao seus usos. Grande parte do capitulo ¢ dedicada a uma pesquisa a respeito de técnicas de prova (ou de- monstracao) ¢ de artificios para descobrir provas. Abordaremos as provas dedu- tivas, a reformulacao de enunciados, as provas por contradicao, as provas por inducao ¢ outros conceitos importantes. Uma secao final introduz os conceitos que permeiam a teoria de automatos: alfabetos, strings ¢ linguagens. 1.1 Por que estudar a teoria de automatos? Ha varias raz6es pelas quais o estudo de automatos ¢ complexidade é uma parte importante do nucleo da Ciencia da Computacao. Esta secao serve para apre- sentar ao leitor a principal motivacao, e também descreve os tpicos mais im- portantes abordados neste livro. 1.1.1 Introducao aos automatos finitos Osautomatos finitos constituem um modelo util para muitos elementos impor- tantes de hardware e software. Veremos, a partir do Capitulo 2, exemplos de como 0 conceitos sao usados. Por enquanto, vamos apenas listar alguns dos elementos mais importantes: 1. Software para projetar e verificar o comportamento de circuitos digitais. 2. O “analisador léxico” de um compilador tipico, isto é, 0 componente do compilador que divide o texto de entrada em unidades logicas, como identificadores, palavras-chave e pontuacao. 3. Software para examinar grandes corpos de texto, como colecdes de pagi- nas da Web, a fim de encontrar ocorréncias de palavras, frases ou outros padroes.

You might also like