Análise de Algoritmos AULA 1 Profa. Sandra de Amo

Slides:



Advertisements
Apresentações semelhantes
Fluxo em Redes Prof. Ricardo R. Santos.
Advertisements

Profa. Sandra de Amo Mestrado em Ciência da Computação 2013 – 2
Análise e Projeto de Algoritmos
A Classe de Problemas NP
AED /04 1 Programa Conceitos de Programação Orientada por Objectos A linguagem Java –Classes e Objectos –Strings e Arrays –Membros de classe: variáveis.
Engenharia de Computação.
Problema de Correspondência de Post (PCP)
Gerenciamento de Banco de Dados
Programação Linear Método Simplex
Teoria da Computação Profa. Sandra de Amo Mestrado em Ciência da Computação 2010 – 1.
2/18/2014Mestrado em Ciencia da Computacao Tópicos Especiais Mineração de Dados Profa. Sandra de Amo Mestrado em Ciência da Computação Faculdade.
Problemas NP-completos
Matemática para Ciência da Computação
Teoria da Computação Profa. Sandra de Amo Bacharelado em CC Mestrado em CC 2008 – 1.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Algoritmos e Estruturas de Dados
Pesquisa em Memória Primária
Medida do Tempo de Execução de um Programa
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária
Árvore Geradora de Peso Mínimo
Classificação e Pesquisa de Dados
Estruturas de Dados e Complexidade de Algoritmos
Crescimento de Funções
Problemas NP-completo
CAP-223 N. L. Vijaykumar (Vijay) Tel:
Programação Dinámica Análise de algoritmos UNISUL
INF 1771 – Inteligência Artificial
Complexidade de Algoritmos
Inteligência Artificial
Informática Teórica Engenharia da Computação
Exercícios PAA- Grafos
Otimização Inteira 5a. Aula Franklina.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Ordenação por inserção
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Introdução e Busca Cega
Introdução aos Agentes Inteligentes Busca Cega (Exaustiva)
Algoritmos e Estruturas de Dados Apresentação do Curso Setembro/2005.
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados, Algoritmos e Complexidade
Abordagens para problemas NP-completos
Estruturas de Dados Aula 1: Introdução e conceitos básicos
Pesquisa Sequencial e Binária
Complexidade de Algoritmos
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Módulo I Capítulo 5: Vetores
Disciplina Análise de Algoritmos BCC-UFU Profa. Sandra de Amo
Busca Combinatorial e Métodos de Heurística
Análise de Complexidade do Algoritmo de Dijkstra
Complexidade em Tempo de um Algoritmo
Implementação e Experimentação Algorítmica
Como analisar um algoritmo
A Classe NP Teoria da Computação Profa. Sandra de Amo.
Análise de Algoritmos Informações Gerais da Disciplina
Problemas NP-completos e Programação Dinâmica
Números Primos – algoritmos e aplicações
Operações Aritméticas AULA 3 Análise de Algoritmos Pós-graduação em Ciência da Computação – UFU Profa. Sandra de Amo.
Analise de Algoritmos e Notação Assintótica
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Abordagens para Problemas Intratáveis Katia S. Guimarães
Disciplina: Estrutura de dados e Algoritmos Docentes: MSc. Manuel Zunguze.
Transcrição da apresentação:

Análise de Algoritmos AULA 1 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação

Objetivos Gerais Conceitos Básicos AULA 1 – Parte I Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação

“Problemas” e “Algoritmos” O que é um problema ? Função P: Input  Output Instância do Problema = I ϵ Input Exemplos de Problemas Problema dos Primos Primos: N  {Sim, Não} Instância = número natural Primos (n) = Sim, se n é primo; Não, caso contrário Problema da Decomposição em primos Decomposição: N  {Seq | Seq = <(p1,n1),...,(pk,nk)>, pi primo} Decomposição (n) = <(p1,n1), ..., (pk,nk)> se n = p1n1p2n2...pknk Exemplo: Decomposição (10) = <(2,1), (5,1)>, pois 10 = 21.51

“Problemas” e “Algoritmos” Problema do Circuito Hamiltoniano Hamilton: Grafos Dirigidos  {Sim, Não} Instância = grafo dirigido G Hamilton(G) = Sim, se G possui um caminho passando por todos os vértices uma única vez; = Não, caso contrário Problemas de Decisão: output = {Sim, Não}

“Problemas” e “Algoritmos” Solução de um Problema Conjunto finito de instruções cuja execução sobre o input termina depois de um tempo finito, produzindo no final o output. Solução de um problema = algoritmo Algoritmo : conjunto finito de instruções que transformam uma entrada em uma saída depois de um tempo finito. Todo Algoritmo está associado a um Problema Algoritmo que resolve o problema

Perguntas Função injetora ?? Conjunto dos Algoritmos Conjunto dos Problemas ??? Não é função injetora: podem existir diferentes algoritmos para resolver um mesmo problema Não é função sobrejetora: Existem problemas que não têm solução

Problema de Correspondência de Post (PCP) Post: Dominós  {Sim,Não} Instância= um conjunto de tipos de peças de dominós Post(D) = Sim, se existe um pareamento de peças de tipos em D = Não, caso contrário.

O problema PCP Input = um conjunto finito de tipos de peças de dominós g f g g f g b c d b b c d b e f c d e e f c d e abc b c d … eg ef 1 2 3 4 n Pergunta : É possivel encontrar um pareamento, isto é, uma sequência de peças de tipos dados no input, tal que o string formado na parte de cima e idêntico ao string formado na parte de baixo ? b c d e f g Sequência : 3 n 1 b c d e f g 8

Exemplos b c a b c a a a b a a b a a b c a a c a a a b c c a b c c 1 2 3 4 a b c a a a b c a b c a a a b c Sequência de peças= 2 1 3 2 4 9

Exemplo Input a b c a b c a a a c c b a Resposta ?? Não 1 2 3 Resposta ?? Não Justificativa : a parte de cima das peças é sempre maior que a parte de baixo ! 10

Formalização do Problema Input genérico do Problema PCP t1 b1 t2 b2 t3 b3 tn bn C = { } , , , … , t1, t2, …, tn são strings sobre um alfabeto S b1, b2, …, bn são strings sobre um alfabeto S Um pareamento (match) = uma sequência <i1, i2, …, ik> de números em {1,…,n} tal que ti1 ti2 … tik = bi1 bi2 … bik = string do pareamento Pergunta : Existe um pareamento para o input C ? 11

Solução quando existe, não precisa ser única Problema da Ordenação Ordena : SeqNat  SeqNat Ordena(<a1,...,an>) = <b1,...,bn> Onde: <b1,...,bn> é uma permutação de <a1,...,an> b1 ≤ b2 ≤ ... ≤ bn Algoritmos que o resolvem: Insertion-Sort Selection-Sort Bubble-Sort Heap-Sort Merge-Sort Quick-Sort Radix-Sort Bucket-Sort Insertion-Sort Selection-Sort Bubble-Sort Heap-Sort Merge-Sort Quick-Sort Eficiência em Tempo cresce Eficiência em Espaço cresce Radix-Sort Bucket-Sort

O que é um bom algoritmo ? Correto ? Eficiente em tempo ? Eficiente em espaço ?

Soluções Aproximadas às vezes são mais interessantes... Problema do Vertex Cover (otimização) Achar o menor subconjunto de vértices S tal que cada aresta tem pelo menos uma d e suas extremidades no conjunto S ? Problema de Minimização de recursos Encontrar a solução ótima é difícil Problema NP-hard Encontrar solução aproximada é factível Existem algoritmos que encontram soluções aproximadas em tempo polinomial Para cada input G, o algoritmo dá uma solução com custo C(G) tal que: C(G) ≥ α Opt(G)

Soluções Aproximadas nem sempre são facilmente encontráveis Problema do Caixeiro Viajante (otimização) d3 d1 d4 d5 d2 Achar o circuito hamiltoniano mais curto (passando por todas as cidades uma única vez) ? Problema de Minimização de recursos d6 Encontrar a solução ótima é difícil Problema NP-hard Encontrar solução aproximada não é factível !

Tipos de Algoritmos Problema P Tipos de Algoritmos: P é decidível (tem solução ?) Qual a complexidade de P ? Se P for NP-completo: existem algoritmos aproximados ? Como projetar um bom algoritmo para P, dentro das limitações da complexidade inerente ao problema P ? Tipos de Algoritmos: Exatos versus Aproximativos Iterativos versus Recursivos Probabilísticos (ou Randômicos)

O que é um Algoritmo Probabilístico ? Problema: Encontrar um elemento a em um array A de n elementos Input: A, a , n Output: posição m onde se encontra a ou ‘Não’ Algoritmo Exato Begin Para i = 1, ..., n faça Se A[i] = a Retorna i Pára Retorna ‘Não’ End Se n é muito grande, algoritmo pode levar muito tempo para dar a resposta .

O que é um Algoritmo Probabilístico ? Problema: Encontrar um elemento a em um array A de n elementos Input: A, a , n Output: posição m onde se encontra a ou ‘Não’ Algoritmo Monte Carlo (não exato) begin i=1 repeat Selecione aleatoriamente um número inteiro m em [1,n] Se A[m] = a Retorna m e pára i = i + 1 until i=k Retorna ‘Não’ end Monte Carlo encontra ‘a’ com Probabilidade (1 – (1/2)k) Tempo de Execução de Monte Carlo é fixo

Análise de um Algoritmo O que é analisar um algoritmo ? Determinar sua eficiência quanto ao tempo de execução quanto à quantidade de memória utilizada para executar o algoritmo Modelo para a Análise da complexidade: Modelo RAM (Random Access Machine) Operações executadas em sequência Não há execuções simultâneas

Análise de um Algoritmo Que operações atômicas considerar no cálculo de custo ? Operações atômicas = custo constante Operações aritméticas Soma, subtração, multiplicação, divisão, resto, piso, teto Movimentação de dados: Carregar, armazenar, copiar Controle Desvio condicional e incondicional Chamada e retorno de subrotinas

Exemplo: Problema, Algoritmo, Análise do Algoritmo Problema: (Ordenação de uma sequência) Input: sequência de n números A = <a1,...,an> Output: B = <b1,...,bn>, onde B é uma permutação de A e b1≤ b2 ≤ ... ≤ bn Projeto de um Algoritmo

Algoritmo Insertion-Sort Insertion-Sort (A) Entrada : A = array [a1,...,an] For j  2 to n do chave  A[j] i  j – 1 % Procura lugar anterior onde inserir a chave While i > 0 e A[i] > chave do A[i+1]  A[i] i  i - 1 A[i+1]  chave Algoritmo é executado in place : Espaço necessário = espaço da entrada + espaço das variáveis Chave, j, i Complexidade em Espaço = constante (=3) (não se conta o espaço ocupado pela entrada)

Algoritmo Insertion-Sort Insertion-Sort (A) Custo Vezes For j  2 to n c1 n do chave  A[j] c2 n-1 i  j – 1 c3 n-1 While i > 0 e A[i] > chave c4 Σnj=2 tj do A[i+1]  A[i] c5 Σnj=2 (tj-1) i  i - 1 c6 Σnj=2 (tj-1) A[i+1]  chave c7 n-1 tj = número de vezes que o teste do While em (4) é executado para cada valor j do loop for

Algoritmo Insertion-Sort T(n) = custo temporal do algoritmo em função do tamanho da entrada (=n) T(n) = c1.n + c2(n-1) + c3(n-1) + c4(Σnj=2 tj) + c5(Σnj=2 (tj-1)) + c6(Σnj=2 (tj-1)) + c7(n-1) T(n) depende de tj O valor de tj depende do “grau de desordenação” da entrada.

Algoritmo Insertion-Sort Melhor caso: a entrada está corretamente em ordem crescente. tj = 1, para j = 2,...,n T(n) = c1.n + c2(n-1) + c3(n-1) + c4(n-1) + c7(n-1) = (c1+c2+c3+c4+c7)n – (c2+c3+c4+c7) Pior caso : a entrada está ordenada de forma reversa (descrescente) tj = j, para j = 2,...,n Σnj=2 j = [n(n+1)/2] – 1 T(n) = c1.n + c2(n-1) + c3(n-1) + c4([n(n+1)/2] – 1) + c5([n(n-1)/2]) + + c6([n(n-1)/2]) + c7(n-1) = = (c4/2 + c5/2 + c6/2)n2 + (c1+c2+c3 - c4/2 - c5/2 - c6/2 + c7)n - (c2 + c3 + c4 + c7)

Algoritmo Insertion-Sort Caso médio: tj = j/2, para j = 2,...,n Exercício: Determinar o valor de T(n) para o caso médio.

Notação O Notação O é utilizada para ter uma estimativa superior do tempo T(n) de execução, em termos de funções do tipo nk, logn, 2n, cujas tendências de crescimento seguem padrões distintos. No melhor caso: T(n) = O(n) No pior caso: T(n) = O(n2)

Apresentação Geral do Curso AULA 1 – Parte II Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação

Apresentação Geral do Curso Bibliografia Material de Suporte Conteúdo Avaliação

Bibliografia Básica 1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms, MIT Press, 3ª Edição, 2009. (Edição em portugues : “Algoritmos-Teoria e Prática”, Editora Campus 2003) 2. S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani. Algorithms. McGraw-Hill Science/Engineering/Math; 1 edition (September 13, 2006). PDF disponível online. 3. Donald E. Knuth. The Art of Computer Programming, Volume 4A: Combinatorial Algorithms,Part 1. (Series in Computer Science & Information Processing) Addison-Wesley Professional, 2011. 4. Vijay V. Vazirani. Approximation Algorithms. Addison-Wesley 2001

Bibliografia Complementar David Harel and Yishai Feldman. Algorithmics: The Spirit of Computing, 3a Edição, Addison Wesley, 2004. 2. Steven S. Skiena: The Algorithm Design Manual. Springer, 2a Edição., 2008. 3. Bernhard Korte, Jens Vygen. Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics), 4a Edição, 2010.

Material de Suporte Livro Texto Slides Artigos http://www.deamo.prof.ufu.br/CursoAA2013.html Livro Texto Slides Artigos

Conteúdo do Curso Parte I : Conceitos Básicos O que é um algoritmo ? Algoritmos Recursivos, Randômicos (Probabilísticos) , Aproximativos Análise e projeto de algoritmo Notação Assintótica Parte II: Algoritmos de Ordenação: Tempo não linear: ocupação otimal de espaço Tempo linear : ocupação não otimal de espaço Parte III : Estruturas de Dados Elementares: Pilhas, Filas, listas, árvores binárias, tabelas hash estatísticas de ordem dinâmicas Avançadas: B-Tree, Heaps binomiais, Heaps de Fibonacci, estruturas de dados para conjuntos

Conteúdo do Curso (cont.) Parte IV : Técnicas Avançadas de Projeto e Análise Programação Dinâmica Algoritmos Gulosos Parte V: Algoritmos de Grafos Algoritmos elementares Árvores Espalhadas Caminhos mais curtos Parte VI : Tópicos Avançados Problemas NP-completos Algoritmos Combinatórios Algoritmos Aproximativos

Critério de Avaliação Prova 1 : 23 de Abril 25 pontos Prova 2: 10 de Junho 25 pontos Prova 3 : 2 de Julho 30 pontos Seminários : 8, 9 e 10 de Julho 20 pontos