Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

1. Introdução e conceitos básicos A teoria da computação começou com a pergunta “Quais problemas são efetivamente computáveis?” e foi estudada por matemáticos como Post, Church, Kleene e Turing. Intuitivamente, computadores diferentes, por exemplo um PC ou um Mac, possuem o mesmo poder computacional. Mas é possível que um outro tipo de máquina é mais poderosa que as conhecidas? Uma máquina, cujos programas nem podem ser implementadas num PC ou Mac? Não é fácil responder essa pergunta, porque a resposta depende das possibilidades computacionais do nosso universo, e logo do nosso conhecimento da física. Matemáticos definiram diversos modelos de computação, entre eles o cálculo lambda, as funções parcialmente recursivas, a máquina de Turing e a máquina de RAM, e provaram que todos são (polinomialmente) equivalentes em poder computacional, e são considerados como máquinas universais. Nossa pergunta é mais específica: “Quais problemas são eficientemente computáveis?”. Essa pergunta é motivada pela observação de que alguns problemas que, mesmo sendo efetivamente computáveis, são tão complicados, que a solução deles para instâncias do nosso interesse é impraticável. Exemplo 1.1 Não existe um algoritmo que decide o seguinte: Dado um programa arbitrário (que podemos imaginar escrito em qualquer linguagem de programação como C ou Miranda) e as entradas desse programa. Ele termina? Esse problema é conhecido como “problema de parada”. ♦ Visão geral • Objetivo: Estudar a análise e o projeto de algoritmos. • Parte 1: Análise de algoritmos, i.e. o estudo teórico do desempenho e uso de recursos. • Ela é pré-requisito para o projeto de algoritmos. • Parte 2: As principais técnicas para projetar algoritmos. 9

1. Introdução e conceitos básicos<br />

A teoria da computação começou com a pergunta “Quais problemas são efetivamente<br />

computáveis?” e foi estudada por matemáticos como Post, Church,<br />

Kleene e Turing. Intuitivamente, computadores diferentes, por exemplo um<br />

PC ou um Mac, possuem o mesmo po<strong>de</strong>r computacional. Mas é possível<br />

que um outro tipo <strong>de</strong> máquina é mais po<strong>de</strong>rosa que as conhecidas? Uma<br />

máquina, cujos programas nem po<strong>de</strong>m ser implementadas num PC ou Mac?<br />

Não é fácil respon<strong>de</strong>r essa pergunta, porque a resposta <strong>de</strong>pen<strong>de</strong> das possibilida<strong>de</strong>s<br />

computacionais do nosso universo, e logo do nosso conhecimento da<br />

física. Matemáticos <strong>de</strong>finiram diversos mo<strong>de</strong>los <strong>de</strong> computação, entre eles o<br />

cálculo lambda, as funções parcialmente recursivas, a máquina <strong>de</strong> Turing e a<br />

máquina <strong>de</strong> RAM, e provaram que todos são (polinomialmente) equivalentes<br />

em po<strong>de</strong>r computacional, e são consi<strong>de</strong>rados como máquinas universais.<br />

Nossa pergunta é mais específica: “Quais problemas são eficientemente computáveis?”.<br />

Essa pergunta é motivada pela observação <strong>de</strong> que alguns problemas<br />

que, mesmo sendo efetivamente computáveis, são tão complicados, que a<br />

solução <strong>de</strong>les para instâncias do nosso interesse é impraticável.<br />

Exemplo 1.1<br />

Não existe um algoritmo que <strong>de</strong>ci<strong>de</strong> o seguinte: Dado um programa arbitrário<br />

(que po<strong>de</strong>mos imaginar escrito em qualquer linguagem <strong>de</strong> programação como<br />

C ou Miranda) e as entradas <strong>de</strong>sse programa. Ele termina? Esse problema é<br />

conhecido como “problema <strong>de</strong> parada”. ♦<br />

Visão geral<br />

• Objetivo: Estudar a análise e o projeto <strong>de</strong> algoritmos.<br />

• Parte 1: Análise <strong>de</strong> algoritmos, i.e. o estudo teórico do <strong>de</strong>sempenho e<br />

uso <strong>de</strong> recursos.<br />

• Ela é pré-requisito para o projeto <strong>de</strong> algoritmos.<br />

• Parte 2: As principais técnicas para projetar algoritmos.<br />

9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!