Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
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
- Page 1: Algoritmos e complexidade Notas de
- Page 4 and 5: Conteúdo 5. Programação dinâmic
- Page 6 and 7: Conteúdo 15.Complexidade de circui
- Page 9: Parte I. Análise de algoritmos 7
- Page 13 and 14: Expressões regulares com · 2 Inst
- Page 15 and 16: cuja solução é Tn = n! 1 + (A +
- Page 17 and 18: Motivação para algoritmos eficien
- Page 19 and 20: - da qualidade e das opções do co
- Page 21 and 22: Algoritmo Comp. C1 Comp. C2 A B 2×
- Page 23 and 24: 1.1. Notação assintótica 1.1. No
- Page 25 and 26: O: Exemplos Proposição 1.1 Para u
- Page 27 and 28: 1.1. Notação assintótica Uma not
- Page 29 and 30: Identidades falsas das relações d
- Page 31 and 32: Exercício 1.10 Mostre que a defini
- Page 33 and 34: 2. Análise de complexidade 2.1. In
- Page 35 and 36: Condensação Entrada Tamanho Conde
- Page 37 and 38: custo : E → R + : e ↦→ |e|. 2
- Page 39 and 40: • Portanto, vamos diferençar ent
- Page 41 and 42: 2.2. Complexidade pessimista Exempl
- Page 43 and 44: 2.2. Complexidade pessimista Assumi
- Page 45 and 46: Exemplo 2.8 (Máximo) (Ver Toscani
- Page 47 and 48: 8 ci := ci + ci−1 9 end for 10 fo
- Page 49 and 50: 2.3. Complexidade média Algoritmo
- Page 51 and 52: Exemplo 2.12 (Busca seqüencial) (C
- Page 53 and 54: Bubblesort: Transposições Quantid
- Page 55 and 56: Máximo 2.3. Complexidade média
- Page 57 and 58: Escolher o pivô 2.3. Complexidade
- Page 59 and 60: 2.3. Complexidade média e o últim
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