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 Introdução • Um algoritmo é um procedimento que consiste em um conjunto de regras não ambíguas as quais especificam, para cada entrada, uma sequência finita de operações, terminando com uma saída correspondente. • Um algoritmo resolve um problema quando, para qualquer entrada, produz uma resposta correta, se forem concedidos tempo e memória suficientes para a sua execução. Motivação • Na teoria da computação perguntamos “Quais problemas são efetivamente computáveis?” • No projeto de algoritmos, a pergunta é mais específica: “Quais problemas são eficientemente computáveis?” • Para responder, temos que saber o que “eficiente” significa. • Uma definição razoável é considerar algoritmos em tempo polinomial como eficiente (tese de Cobham-Edmonds). Custos de algoritmos • Também temos que definir qual tipo de custo interessa. • Uma execução tem vários custos associados: Tempo de execução, uso de espaço (cache, memória, disco), energia consumida, energia dissipada, ... • Existem características e medidas que são importantes em contextos diferentes Linhas de código fonte (LOC), legibilidade, manutenabilidade, corretude, custo de implementação, robustez, extensibilidade,... • A medida mais importante: tempo de execução. • A complexidade pode ser vista como uma propriedade do problema Mesmo um problema sendo computável, não significa que existe um algoritmo que vale a pena aplicar. O problema 10
Expressões regulares com · 2 Instância Uma expressão regular e com operações ∪ (união), · ∗ (fecho de Kleene), · (concatenação) e · 2 (quadratura) sobre o alfabeto Σ = {0, 1}. Decisão L(e) = Σ ∗ ? que parece razoavelmente simples é, de fato, EXPSPACE-completo [52, Corolário 2.1] (no momento é suficiente saber que isso significa que o tempo para resolver o problema cresce ao menos exponencialmente com o tamanho da entrada). Exemplo 1.2 Com e = 0 ∪ 1 2 temos L(e) = {0, 11}. Com e = (0 ∪ 1) 2 · 0 ∗ temos L(e) = {00, 01, 10, 11, 000, 010, 100, 110, 0000, 0100, 1000, 1100, . . .}. Existem exemplos de outros problemas que são decidíveis, mas têm uma complexidade tão grande que praticamente todas instâncias precisam mais recursos que o universo possui (por exemplo a decisão da validade na lógica monádica fraca de segunda ordem com sucessor). O universo do ponto da vista da ciência da computação Falando sobre os recursos, é de interesse saber quantos recursos nosso universo disponibiliza aproximadamente. A seguinte tabela contém alguns dados básicos: Idade 13.75 ± 0.11 × 10 9 anos ≈ 43.39 × 10 16 s Tamanho ≥ 78 × 10 9 anos-luz Densidade 9.9 × 10 −30 g/cm 3 Número de átomos 10 80 Número de bits 10 120 Número de operações 10 lógicas elementares até hoje 120 Operações/s ≈ 2 × 10102 ♦ 11
- 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 14 and 15: 1. Introdução e conceitos básico
- Page 16 and 17: 1. Introdução e conceitos básico
- Page 18 and 19: 1. Introdução e conceitos básico
- Page 20 and 21: 1. Introdução e conceitos básico
- Page 22 and 23: 1. Introdução e conceitos básico
- Page 24 and 25: 1. Introdução e conceitos básico
- Page 26 and 27: 1. Introdução e conceitos básico
- Page 28 and 29: 1. Introdução e conceitos básico
- Page 30 and 31: 1. Introdução e conceitos básico
- Page 32 and 33: 1. Introdução e conceitos básico
- Page 34 and 35: 2. Análise de complexidade • Par
- Page 36 and 37: 2. Análise de complexidade • Uma
- Page 38 and 39: 2. Análise de complexidade 1. Atri
- Page 40 and 41: 2. Análise de complexidade Exemplo
- Page 42 and 43: 2. Análise de complexidade Compone
- Page 44 and 45: 2. Análise de complexidade • Qua
- Page 46 and 47: 2. Análise de complexidade Algorit
- Page 48 and 49: 2. Análise de complexidade Algorit
- Page 50 and 51: 2. Análise de complexidade Tratabi
- Page 52 and 53: 2. Análise de complexidade A compl
- Page 54 and 55: 2. Análise de complexidade • Fre
- Page 56 and 57: 2. Análise de complexidade Exemplo
- Page 58 and 59: 2. Análise de complexidade 1 i f l
- Page 60 and 61: 2. Análise de complexidade Novamen
1. Introdução e conceitos básicos<br />
Introdução<br />
• Um algoritmo é um procedimento que consiste em um conjunto <strong>de</strong> regras<br />
não ambíguas as quais especificam, para cada entrada, uma sequência<br />
finita <strong>de</strong> operações, terminando com uma saída correspon<strong>de</strong>nte.<br />
• Um algoritmo resolve um problema quando, para qualquer entrada, produz<br />
uma resposta correta, se forem concedidos tempo e memória suficientes<br />
para a sua execução.<br />
Motivação<br />
• Na teoria da computação perguntamos “Quais problemas são efetivamente<br />
computáveis?”<br />
• No projeto <strong>de</strong> algoritmos, a pergunta é mais específica: “Quais problemas<br />
são eficientemente computáveis?”<br />
• Para respon<strong>de</strong>r, temos que saber o que “eficiente” significa.<br />
• Uma <strong>de</strong>finição razoável é consi<strong>de</strong>rar algoritmos em tempo polinomial<br />
como eficiente (tese <strong>de</strong> Cobham-Edmonds).<br />
Custos <strong>de</strong> algoritmos<br />
• Também temos que <strong>de</strong>finir qual tipo <strong>de</strong> custo interessa.<br />
• Uma execução tem vários custos associados:<br />
Tempo <strong>de</strong> execução, uso <strong>de</strong> espaço (cache, memória, disco), energia consumida,<br />
energia dissipada, ...<br />
• Existem características e medidas que são importantes em contextos<br />
diferentes<br />
Linhas <strong>de</strong> código fonte (LOC), legibilida<strong>de</strong>, manutenabilida<strong>de</strong>, corretu<strong>de</strong>,<br />
custo <strong>de</strong> implementação, robustez, extensibilida<strong>de</strong>,...<br />
• A medida mais importante: tempo <strong>de</strong> execução.<br />
• A <strong>complexida<strong>de</strong></strong> po<strong>de</strong> ser vista como uma proprieda<strong>de</strong> do problema<br />
Mesmo um problema sendo computável, não significa que existe um algoritmo<br />
que vale a pena aplicar. O problema<br />
10