A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise e Projeto de Algoritmos Prof. Eduardo Barrére

Apresentações semelhantes


Apresentação em tema: "Análise e Projeto de Algoritmos Prof. Eduardo Barrére"— Transcrição da apresentação:

1 Análise e Projeto de Algoritmos Prof. Eduardo Barrére

2 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére A Disciplina.... Lecionada por dois professores: Eduardo Barrére Foco principal: Análise de Algoritmos ( 30 pontos) Prova de 30 pontos, provavelmente 07/11 Raul Fonseca Foco principal: Projeto de Algoritmos (70 pontos)

3 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Primeira parte.... Ementa abordada: Conceitos básicos. Dominação assintótica. Problemas P, NP, NP- Completo e NP-Difícil. Classes de problemas. Culpado pela Análise de Algoritmos: Donald. E. Knuth

4 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Bibliografia The Design And Analysis Of Computer Algorithms AHO, ALFRED V. ADDISON WESLEY ISBN: ª Edição Algoritmos - Teoria e Pratica STEIN, CLIFFORD, LEISERSON, CHARLES E., RIVEST, RONALD L., CORMEN, THOMAS H. CAMPUS ISBN: ª Edição Introduction To Algorithms LEISERSON, CHARLES E., RIVEST, RONALD L., CORMEN, THOMAS H. MIT PRESS. ISBN: ª Edição Complexity theory: exploring the limits of efficient algorithms Wegener, Ingo Springer 2005

5 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Complexidade De Algoritmos (Coleção: LIVROS DIDATICOS UFRGS, V.13) TOSCANI, LAIRA VIEIRA, VELOSO, PAULO A.S. BOOKMAN. ISBN: ª Edição Art Of Computer Programming 3 Vols KNUTH, DONALD ERVIN ADDISON WESLEY. ISBN: ª Edição Algoritmos e heuristicas: desenvolvimento e avaliacao de performance Campello, Ruy Eduardo, Maculan, Nelson EDUFF Bibliografia

6 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Bibliografia Analysis Of Algorithms: An Active Learning Approach MCCONNELL, JEFFREY JONES AND BARTLETT. ISBN: Algorithm Design GOODRICH, MICHAEL T., TAMASSIA, R. IE-WILEY. ISBN: ª Edição Algorithms and Complexity Herbert S. Wilf A K Peters. 2 ª Edição – ISBN: Mathematics For The Analysis Of Algorithms GREENE, DANIEL H., KNUTH, DONALD E. SPRINGER VERLAG NY. ISBN: ª Edição

7 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Conceitos.... O que é um algortimo? Entrada -> processamento (sequencia finita) -> saída Formado por regras não ambiguas! Tudo pode ser resolvido por um algoritmo? (computabilidade) Tudo que é resolvido por um algoritmo é aceitável? Complexidade: simplificadamente, a quantidade de trabalho requerido para solucionar o problema

8 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Aquecendo.... Compare e critique as duas proposições a seguir: Proposição 1: "O candidato estará eleito se obtiver metade mais um dos votos válidos". Proposição 2: "O candidato estará eleito se obtiver mais da metade dos votos válidos".

9 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Aquecendo.... Cada um dos algoritmos abaixo recebe um inteiro positivo e devolve outro inteiro positivo. Os dois algoritmos são equivalentes: devolvem o mesmo número se receberem um mesmo n. Digamos que uma operação aritmética é uma adição, subtração, multiplicação ou divisão. Quantas operações aritméticas o primeiro algoritmo faz? Quantas operações aritméticas o segundo algoritmo faz? Qual dos dois algoritmos é mais eficiente? Soma-Quadrados-A (n) 1. x 0 2. para j crescendo de 1 até n faça 3. x x + j · j 4. devolva x Soma-Quadrados-B (n) 1. x n · (n+1) · (2n+1) 2. x x/6 3. devolva x

10 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Então... Uma base sólida de conhecimento e técnica de algoritmos é uma das características que separa o programador experiente do aprendiz. Com a moderna tecnologia de computação, você pode realizar algumas tarefas sem saber muito sobre algoritmos, mas com um boa base em algoritmos você pode fazer muito, muito mais. Cormen, Leiserson, Rivest, Stein

11 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Aquecendo.... Mostre que, para qualquer número inteiro positivo n tem-se (n1)/2 piso(n/2) n/2 piso(x) O único inteiro i tal que i x < i+1. A notação correta para piso(x) é: x

12 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Prova Matemática Uma prova matemática é uma argumentação precisa que procura convencer o leitor de que uma certa proposição, previamente enunciada, está correta. É uma sequência de afirmações organizada da seguinte maneira: cada afirmação é consequência simples das afirmações anteriores e das hipóteses da proposição em discussão; a última afirmação é a proposição que se deseja provar.

13 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Prova Matemática Considere a configuração do jogo Campo Minado. Cada posição do tabuleiro é especificada por suas coordenadas. Assim, por exemplo, o extremo superior esquerdo do tabuleiro tem coordenadas (1,1) e o cruzamento da primeira linha com a segunda coluna tem coordenadas (1,2). PROPOSIÇÃO: A posição (1,2) da configuração acima não contém bomba.

14 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Prova Matemática PROPOSIÇÃO: A posição (1,2) da configuração acima não contém bomba. PROVA, por contradição: Suponha, por um momento, que há uma bomba em (1,2). A posição (2,3) é vizinha de duas bombas e há uma bomba em (3,4); logo, as posições (2,2) e (3,2) não têm bomba alguma. Portanto, o "3" na posição (3,3) garante que há uma bomba em (4,2). Agora, o "2" na posição (5,3) garante que não há bomba em (5,2) nem em (6,2). Mas isso é inconsistente com o "3" na posição (6,3). Esta contradição mostra que (1,2) não pode conter bomba.

15 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Algoritmo Estratégia: especificar (definir propriedades) arquitetura (algoritmo e estruturas de dados) Analise de complexidade (tempo de execução e memória) implementar (numa linguagem de programação) testar (submeter entradas e verificar observância das propriedades especificadas)

16 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Complexidade (aperitivo...) Tipos de Complexidade Espacial Este tipo de complexidade representa, por exemplo, o espaço de memória usado para executar o algoritmo. Temporal Este tipo de complexidade é o mais usado podendo dividir-se em dois grupos: Tempo (real) necessário à execução do algoritmo. (como podemos medir?) Número de instruções necessárias à execução.

17 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Análise de Algoritmos Para avaliar e comparar o desempenho de dois algoritmos: executar ambos (muitas vezes) para ver qual é mais rápido fornece indicações sobre o desempenho e informação sobre como efetuar uma análise mais profunda. Que dados usar? dados reais: verdadeira medida do custo de execução dados aleatórios: assegura-nos que as experiências testam o algoritmo e não apenas os dados específicos Caso médio dados perversos: mostram que o algoritmo funciona com qualquer tipo de dados Pior caso! dados benéficos: Melhor caso

18 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Análise de Algoritmos A análise precisa é uma tarefa complicada: algoritmo é implementado numa dada linguagem linguagem é compilada e programa é executado num dado computador difícil prever tempos de execução de cada instruções e antever otimizações muitos algoritmos são "sensíveis" aos dados de entrada muitos algoritmos não são bem compreendidos Para prever o tempo de execução de um programa: apenas é necessário um pequeno conjunto de ferramentas matemáticas

19 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Medidas de Análise Devem ser independentes da tecnologia (hardware/software) Modelos Matemáticos simplificados baseados nos fatores relevantes: Tempo de Execução Uma função que relaciona o tempo de execução com o tamanho de entrada: t = F(n) Conjunto de operações a serem executadas. Custo associado à execução de cada operação. Ocupação de Espaço em Memória Analise de Algoritmos

20 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Complexidade Exemplo Sejam 5 algoritmos A 1 a A 5 para resolver um mesmo problema, de complexidades diferentes. (Supomos que uma operação leva 1 ms para ser efetuada.) T k (n) é a complexidade ou seja o número de operações que o algoritmo efetua para n entradas n A 1 T 1 (n)= n A 2 T 2 (n)=nlog n A 3 T 3 (n)=n 2 A 4 T 4 (n)=n 3 A 5 T 5 (n)=2 n s0.064s0.256s4s1m4s s0.16s1s33s46 Dias s9s4m22s1 Dia 13h Séculos tempo necessário para o algoritmo em função de n entradas

21 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Operações primitivas Atribuição de valores a variáveis Chamadas de métodos Operações aritméticas Comparação de dois números Acesso a elemento de um array Seguir uma referência de objeto (acesso a objeto) Retorno de um método

22 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 1 arrayMax(A, n): Entrada: array A com n>=1 elementos inteiros Saida: o maior elemento em A tmpMax <- A[0] for i<-1 to n-1 do if tmpMax < A[i] then tmpMax <- A[i] return tmpMax

23 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 1 T (n) = c1*1+ c2*n + c3*(n-1) + c5 * 1 (melhor caso) T (n) = c1+ n*c2 + n*c3 – c3 + c5 se considerarmos os custos iguais, teremos: T (n) = c+ n*c + n*c – c + c = 2n*c + c ( = 2n + 1 para c=1) códigocustovezes tmpMax <- A[0]c11 for i <- 1 to n-1 doc2n if tmpMax < A[i] thenc3n-1 tmpMax <- A[i]c4n-1 return tmpMaxc51

24 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 1 T (n) = c1*1+ c2*n + c3*(n-1) + c4*(n-1) + c5 * 1 (pior caso) T (n) = c1+ n*c2 + n*c3 – c3 + n*c4 – c4 + c5 se considerarmos os custos iguais, teremos: T (n) = c+ n*c + n*c – c + n*c – c + c = 3n*c ( = 3n para c=1) T (n) t(I) T*(n) códigocustovezes tmpMax <- A[0]c11 for i <- 1 to n-1 doc2n if tmpMax < A[i] thenc3n-1 tmpMax <- A[i]c4n-1 return tmpMaxc51

25 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Observações sobre consumo de tempo: estimar consumo do algoritmo, independente do computador despreze constantes multiplicativas: 10 n é o mesmo que n consumo de tempo é diferente para cada instância do problema agrupe instâncias por tamanho o conceito de tamanho de uma instância muitas instâncias têm o mesmo tamanho consumo de tempo no pior caso consumo de tempo no melhor caso

26 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 2 Rearranjar um vetor em ordem crescente A[1.. n] é crescente se A[1] · · · A[n]

27 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 2 ORDENA-POR-INSERÇÃO (A, n) 1 para j 2 até n faça 2 chave A[j] 3 i j 1 4 enquanto i 1 e A[i] > chave faça 5 A[i+1] A[i] 6 i i 1 7 A[i+1] chave

28 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 2 O algoritmo faz o que prometeu? Invariante: no início de cada iteração, A[1.. j1] é crescente Se vale na última iteração, o algoritmo está correto! vale na primeira iteração se vale em uma iteração, vale na seguinte ORDENA-POR-INSERÇÃO (A, n) 1 para j 2 até (*) faça 2 chave A[j] 3 i j 1 4 enquanto i 1 e A[i] > chave faça 5 A[i+1] A[i] 6 i i 1 7 A[i+1] chave

29 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 2 Quanto tempo consome? Suponha 1 unidade de tempo por linha Linha total de unidades de tempo 1 = n 2 = n 1 3 = n · · ·+n = (n 1)(n+2)/ · · ·+(n1) = n(n 1)/ · · ·+(n1) = n(n 1)/2 7 = n 1 total 3/2n 2 + 7/2n 4 unidades de tempo ORDENA-POR-INSERÇÃO (A, n) 1 para j 2 até n faça 2 chave A[j] 3 i j 1 4 enquanto i 1 e A[i] > chave faça 5 A[i+1] A[i] 6 i i 1 7 A[i+1] chave

30 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 3 Encontrar a soma dos elementos positivos de um vetor A[1.. n] Uma instância do problema: Encontrar a soma dos elementos positivos do vetor (20; -30; 15; -10; 30; -20; -30; 30)

31 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 3 O algoritmo está correto! Invariante: no começo de cada iteração s é a soma dos positivos de A[1.. i-1] No fim,s é a soma dos positivos de A[1.. n]. SOMAPOSITIVOS (A; n) 1 s = 0 2 para i = 1 até n faça 3 se A[i] > 0 4 então s = s + A[i] 5 devolva s O algoritmo está correto? testes só podem mostrar que o algoritmo está errado (????) análise pode provar que o algoritmo está correto.

32 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 3 SOMAPOS (A;n) 1 se n = 0 2 então devolva 0 3 senão s = SOMAPOS (A; n - 1) 4 se A[n] > 0 5 então devolva s + A[n] 6 senão devolva s T(n) : consumo de tempo no pior caso recorrência: T(n) = T(n - 1) + const T(n) = ? Algoritmo recursivo

33 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Exemplo de Análise de Algoritmo 3 Observações sobre algoritmos recursivos Problemas com estrutura recursiva: cada instância do problema contém uma instância menor do mesmo problema Algoritmo recursivo: se a instância em questão é pequena resolva-a diretamente Senão: reduza-a a uma instância menor do mesmo problema encontre solução S da instância menor use S para construir solução da instância original

34 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Análise: Crescimento de Funções O tempo de execução geralmente dependente de um único parâmetro N ordem de um polinômio tamanho de um arquivo a ser processado, ordenado, etc ou medida abstrata do tamanho do problema a considerar (usualmente relacionado com o número de dados a processar) Quando há mais de um parâmetro procura-se exprimir todos os parâmetros em função de um só faz-se uma análise em separado para cada parâmetro

35 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Análise: Crescimento de Funções Os Algoritmos têm tempo de execução proporcional a 1 - muitas instruções são executadas uma só vez ou poucas vezes (se isto for verdade para todo o programa diz-se que o seu tempo de execução é constante) Log N - tempo de execução é logarítmico (cresce ligeiramente à medida que N cresce) (quando N duplica log N aumenta mas muito pouco; apenas duplica quando N aumenta para N 2 ) N - tempo de execução é linear (típico quando algum processamento é feito para cada dado de entrada) (situação ótima quando é necessário processar N dados de entrada) (ou produzir N dados na saída)

36 Programa de Pós-Graduação em Ciência da Computação – DCC – UFJF APA / Barrére Análise: Crescimento de Funções N log N - típico quando se reduz um problema em subproblemas, se resolve estes separadamente e se combinam as soluções (se N é 1 milhão N log N é perto de 20 milhões) N 2 - tempo de execução quadrático (típico quando é preciso processar todos os pares de dados de entrada) (prático apenas em pequenos problemas, ex: produto matriz - vetor) N 3 - tempo de execução cúbico (para N = 100, N 3 = 1 milhão, ex: produto de matrizes) 2 N - tempo de execução exponencial (provavelmente de pouca aplicação prática; típico em soluções de força bruta) (para N = 20, 2 N = 1 milhão; N duplica, tempo passa a ser o quadrado)


Carregar ppt "Análise e Projeto de Algoritmos Prof. Eduardo Barrére"

Apresentações semelhantes


Anúncios Google