Projeto e Análise de Algoritmos Problemas e Algoritmos Altigran Soares da Silva Universidade Federal do Amazonas Instituto de Computação Sobre o Curso Professor Altigran Soares da Silva Professor Associado Instituto de Computação UFAM alti@icomp.ufam.edu.br www.icomp.ufam.edu.br/altigran Google: altigran DBLP: Artigos Publicados Scholar: Impacto das publicações Lattes: CV Completo Sobre o Curso Aulas Terças e Quintas de 14:00 às 16:00 Blog http://paapg201501.wordpress.com/ Informações gerais, transparências, listas de exercícios, provas, notas, etc. Avaliação Duas Avaliações prático-teóricas: Componente Teórico: 20 pontos Componente Prático: 15 pontos Enunciado entregue pelo menos 30 dias antes Obrigatória entrega dos 2 componentes Sem um dos componentes, a nota da avaliação será zero.
Avaliação Seminário Final: Ao final do semestre cada aluno deverá apresentar um seminário evolvendo o conteúdo da disciplina Acompanhado de artigo técnico de até 8 páginas em coluna dupla no formato para artigos em conferências da ACM. 25 pontos e mais 5 pontos de assiduidade aos seminários apresentados. Avaliação Nota Final: NF: (AV1 + AV2 + Seminário)/10 Para ser aprovado, NF 7,0. Sobre o Curso Sobre o curso Livro Texto CORMEN, Thomas H. LEISERSON, Charles E. RIVEST, Ronald L. STEIN, Clifford. Introduction to algorithms. 3nd edition. MIT Press, 2000. LEISERSON, Charles E. STEIN, Clifford. RIVEST, Ronald L. CORMEN, Thomas H. Algoritmos, teoria e prática. Campus, 2002. Outras Referências HOROWITZ, E. SAHNI, S. Fundamentals of computer algorithms. Computer Science Press, 1978. ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 2010 AHO, A. V. HOPCROFT, J. E. ULLMAN, J. D. The design and analysis of computer algorithms. Addison-Wesley, 1974. Outras Referências GAREY, M. R. JOHNSON, D. S. Computers and intractability: a guide to the theory of np-completeness. W. H. Freeman, 1979. GONNET, G. H. BAEZA-YATES, R. Handbook of algorithms and data structures. 2nd edition. Addison-Wesley, 1991. KNUTH, E. The art of computer programming. Addison-Wesley. (1) Fundamental Algorithms, (2) Seminumerical Algorithms, e (3) Sorting and Searching. LAWLER, E. L. LENSTRA, J. K. KAN, A. H. SHMOYS, D. B. The traveling salesman problem. Wiley, 1985. MANBER. Introduction to algorithms - a creative approach. Addison-Wesley, 1989. SEDGEWICK, R. Algorithms. 2nd edition. Addison-Wesley, 1988.
Programa Encarando o monstro Fundamentos Divisão e Conquista Método Guloso Programação Dinâmica Problemas NP-Completo PAA 2014/01 12,00 10,00 8,00 6,00 4,00 2,00 0,00 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 O que NÃO fazer!! Não estudar diariamente Estudar somente no dia da prova Estudar somente pelos slides Não fazer as listas de exercícios
Planejamento Aula Unidade Assunto Referência 1 Fundamentos Problemas e Algoritmos; Notação Assintótica 1,2 2 Fundamentos Analise de Algoritmos: Notação Assintótica 2 3 Fundamentos Somatórios / Dvivsão e Conquista / Recorrências 3,4 4 Fundamentos Dvivsão e Conquista / Recorrências 4 5 Fundamentos Reserva 6 Método Guloso Elementos da Estratégia Gulosa 16.1,16.2 7 Método Guloso Códigos de Huffman 16.3 8 Método Guloso Árvore Geradora Mínima 16.3 9 Método Guloso Caminhos Mínimos 23 10 Método Guloso RESERVA 24,25 11 1a. Avaliação 12 Programação Dinâmica Programação Dinâmica 15 13 Programação Dinâmica Multiplicação de Cadeias de Matrizes 15 14 Programação Dinâmica Problema do Caixeiro Viajante 15.1 15 Programação Dinâmica Problema da Mochila 16 Programação Dinâmica RESERVA 17 Problemas NP-Completo Algoritmos de Tempo Polinomial 34 18 Problemas NP-Completo NP-Completude e Redutibilidade 34 19 Problemas NP-Completo Provas de NP-Completude 34 20 Problemas NP-Completo Problemas NP-Completo 34 21 Problemas NP-Completo RESERVA 22 2a. Avaliação 23-30 Seminários Conversa Típica A: O que fazes? Qual a tua profissão? B: Eu sou cientista da computação A: Ha! Por que quando eu estou na tela X no MS Y.Z eu não consigo imprimir o arquivo Q? Uma resposta Ciência da Computação tem tanto a ver com computadores como a astronomia tem a ver com telescópios E. Dijkstra (Ganhador do Turing Award em 1972)
Na boca do povo O que é Ciência da Computação? Também chamada de Computação Não tem a ver tanto com computadores e sim com computar Definição da ACM - 1989 Ciência da Computação é o estudo sistemático de processos algorítmicos Áreas de CC Hardware/Arquitetura Construçao de computadores e dispositivos Software Construçao de programas e sistemas Teoria Estudo do que é possível computar
Computadores Os computadores eletrônicos foram criados por motivos tipicamente bélicos Cálculo de Balística Quebra de códigos cifrados Cálculo de Censo Algoritmos Um algoritmo: A essência de um procedimento computacional composto por instruções seqüenciais passo a passo Um programa: Implementação de um algoritmo em uma dada linguagem de programação. Estrutura de dados: forma de organizar os dados necessários à solução de um problema Programas Programas de computador implementam algoritmos em uma linguagem de programação (Java, C, etc.) Estamos interessados em algoritmos/ programas eficientes (rápidos) História da CC 2000 anos antes dos computadores modernos Computadores digitais tornaram a computação uma atividade prática de ser executada de forma massiva
Algoritmos O nome Algoritmo é geralmente associado ao do matemático persa Mohammed al-khowarizmi, que em latin foi traduzido como Algorismus Algoritmo de Euclides 300 A/C Cálculo do Máximo Divisor Comum de dois números Ainda em uso hoje! Algoritmos Ancestrais 500 A/C : Algoritmo babilônico para aproximar as raízes quadradas Crivo de Eratosthenes 250 A/C Derterminar se x é primo:x=17. Liste todos os números de 2 a 16 Comece com 2. Se 2 não divide 17, então risque 2 e todos os múltiplos de 2 da lista Vá para o próximo número não riscado e repita Se todos os numéros terminarem riscados, x é primo.
Crivo de Eratosthenes Ineficiente para números grandes (centenas de dígitos) Métodos probalisticos eficientes foram desenvolvidos nos anos 70 e 80 Havia um pequena chance de erro Método de Newton 1600: Método de Newton para achar as raízes de um polinômio Matemática dos Algoritmos Hilbert (1928): Qualquer problema pode ser resolvido por um procedimento mecânico? Alan Turing (1936): Não! Existem problemas que nenhum computador pode resolver Problemas Difícies 10o. problema de Hilbert (1900): Existe um algoritmo para achar soluções inteiras para as equaçoes de Diophantine? x + 2y 2 = 0 x 6 + y 6 = z 6
10o. Problema de Hilbert Matiyasevich provou em 1970 que não existe um algoritmo que resolve equações de Diophantine Arbitrárias Alguns problemas permitem soluções algoritmicas, outros não Alguns permitem soluções algoritmicas eficientes! Problema do Caixeiro Viajante Uma viagem (tour) em um grafo é um ciclo que passa por todos os vértices. Uma viagem é simples quando os vértices, exceto o primeiro, não se repetem Seja um grafo ponderado (ou seja, com pesos nas arestas), uma viagem do caixeiro viajante é uma viagem simples de custo mínimo. Problema do Caixeiro Viajante Problema do Caixeiro Viajante 7 D B 2 5 2 C 8 6 E A 1 Viagem do PCV com custo 17 4 3 F Não existe algoritmo computacionalmente eficiente conhecido para resolver o PCV. O PCV é um dos grandes problemas em aberto na ciência da computação! Problemas relacionados ao PCV vêm sendo estudados por matemáticos desde o século XIX A forma geral do problema foi definida na década de 1930 É um exemplo de um problema da classe NP-completo
Problema do Caixeiro Viajante Em 1954 George Dantzig, Ray Fulkerson, e Selmer Johnson resolveram uma instância do TSP para 49 cidades Em 1987, Martin Groetschel e Olaf Holland encontraram uma viagem ótima para 666 lugares interessantes ao redor do mundo. Solução força bruta Solução exaustiva envolve gerar todas as viagens calculando seus custos e determinar aquela de menor custo Para n arestas teremos (n-1)! possíveis viagens Em um grafo completo de 20 nodos teriamos algo em torno de 2 1018 operações Conclusão Ciência da Computação estuda a solução de problemas usando algoritmos Tecnologia não é a essência da Ciência da Computação