Agenda •• Introdução Introdução Informal Informal •• Motivação Motivação Análise e Técnicas de Algoritmos Jorge Figueiredo Visão Visão Geral Geral do do Curso Curso © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Introdução Informal Problemas Computacionais •• O O nosso nosso curso curso éésobre sobre técnicas técnicas ee análise análise de de algoritmos algoritmos (computacionais). (computacionais). •• O O que que éé um um algoritmo? algoritmo? –– Procedimento Procedimento computacional computacional que que toma toma algum algum valor valor (conjunto) (conjunto) como como entrada entrada ee produz produz um um valor valor (conjunto) (conjunto) como como saída. saída. •• Qual Qual aa diferença diferença entre entre algoritmos algoritmos ee programas? programas? –– Idéia Idéia xxtexto texto descritivo descritivo –– humanos humanos xxcomputadores computadores © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Problemas Computacionais Especifica Especificaaa relação relação entre entre aa entrada entrada ee aa saída saída desejada desejada Ordenação Entrada: Uma seqüência de n números ‹a1, a2, ..., an›. Saída: Uma reordenação da seqûëncia de entrada ‹a'1, a'2, ..., a'n›, onde a'1 ≤ a'2 ≤ ... ≤ a'n. Número Primo Entrada: Uma número natural q. Saída: sim ou não, dependendo se q é primo. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Como Descrever Algoritmos? •• Um Um instância instância de de um um problema problema computacional computacional ééum um possível possível valor valor para para aa entrada. entrada. –– ‹45, ‹45, 7, 7, 13, 13, 23, 23, 2› 2›ééuma umainstância instânciapara para ooproblema problema da da ordenação. ordenação. –– 29 29 éé uma uma instância instância para para oo problema problema dos dos números números primos. primos. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG •• Utilizar Utilizar uma uma linguagem. linguagem. Qual? Qual? –– Linguagem Linguagem natural natural (português (português ou ou inglês). inglês). –– Linguagem Linguagem de de programação. programação. •• Problemas: Problemas: –– Ambiguidade Ambiguidade –– Estruturação Estruturação –– Prolixidade Prolixidade –– Inadequação Inadequação para para programação programação Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG 1 Como descrever algoritmos? Como descrever algoritmos? Linguagem Natural Código Expressividade Flexibilidade Controle Concisão Estrutura Formal Linguagem Natural Código Expressividade Flexibilidade Controle Concisão Estrutura Formal Pseudo-Código Reduzir ambiguidade Abstrair detalhes não importantes Fácil de ser assimilado por humanos © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Insertion Sort j 1 Exemplo do Insertion Sort n 45 A: ORDENADO © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 7 13 23 2 chave InsertionSort(A, n) for j← 2 to n do chave ← A[j] ► insere A[j] na parte ordenada A[1..j-1] i←j–1 while i > 0 e A[i] > chave do A[i + 1] ← A[i] i←i–1 A[i + 1] ← chave © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Exemplo do Insertion Sort 45 Análise e Técnicas de Algoritmos – 2005.1 7 13 23 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Exemplo do Insertion Sort 2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 45 7 13 23 2 7 45 13 23 2 © Jorge Figueiredo, DSC/UFCG 2 Exemplo do Insertion Sort Exemplo do Insertion Sort 45 7 13 23 2 45 7 13 23 2 7 45 13 23 2 7 45 13 23 2 7 13 45 23 2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Exemplo do Insertion Sort Exemplo do Insertion Sort 45 7 13 23 2 45 7 13 23 2 7 45 13 23 2 7 45 13 23 2 7 13 45 23 2 7 13 45 23 2 7 13 23 45 2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Exemplo do Insertion Sort Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Exemplo do Insertion Sort 45 7 13 23 2 45 7 13 23 2 7 45 13 23 2 7 45 13 23 2 7 13 45 23 2 7 13 45 23 2 7 13 23 45 2 7 13 23 45 2 2 7 13 23 45 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG 3 Avaliação de Algoritmos Avaliação de Algoritmos •• Propriedades: Propriedades: –– Corretude Corretude –– Simplicidade Simplicidade –– Eficiência Eficiência •• Corretude: Corretude: –– Um Um algoritmo algoritmo está estácorreto correto se se para para toda toda entrada entrada (legal) (legal) ele ele produz produz aa saída saída correta. correta. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Avaliação de Algoritmos Avaliação de Algoritmos •• Simplicidade: Simplicidade: –– Benefícios Benefícios pragmáticos: pragmáticos: •• Fácil Fácil de de ser ser entendido entendido •• Fácil Fácil de de implementar implementar •• Fácil Fácil de de manter manter Análise e Técnicas de Algoritmos – 2005.1 •• Eficiência Eficiência (em (emfunção função do do tamanho tamanho do do problema/entrada): problema/entrada): –– Tempo Tempo •• Quanto Quanto tempo tempo leva leva para para produzir produzir aa saída saída correta? correta? –– Espaço Espaço •• Quanto Quanto espaço espaço de de memória memória éé necessário? necessário? © Jorge Figueiredo, DSC/UFCG Como provar a corretude de um algoritmo? •• Não Não éé uma uma tarefa tarefa simples simples •• Testes Testes não não são são suficientes: suficientes:servem servem apenas apenas para para mostrar mostrar que que um um algoritmo algoritmo tem tem erros. erros. •• Ferramentas Ferramentas utilizadas: utilizadas: –– Invariantes Invariantes de de laço laço –– Função Função recursiva recursiva –– Prova Prova por por indução indução Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Corretude do Insertion Sort j 1 n A: ORDENADO chave InsertionSort(A, n) for j← 2 to n do chave ← A[j] ► insere A[j] na parte ordenada A[1..j-1] i←j–1 while i > 0 e A[i] > chave do A[i + 1] ← A[i] i←i–1 A[i + 1] ← chave Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG 4 Corretude do Insertion Sort Eficiência do Insertion Sort •• Invariante Invariante de de laço: laço: No No início início de de cada cada iteração iteração do do laço, laço, oo subarray subarrayA[1..j-1] A[1..j-1] contém contém os os elementos elementos originais originais de de A[1..j-1] A[1..j-1] mas, mas,ordenados. ordenados. •• Prova: Prova: Inicialização Inicialização :: j=2, j=2,A[1..j-1]=A[1..1]=A[1], A[1..j-1]=A[1..1]=A[1], ordenado. ordenado. Manutenção: Manutenção: cada cada iteração iteração preserva preserva oo invariante. invariante. Término: Término: j=n+1, j=n+1, então então A[1..j-1]=A[1..n], A[1..j-1]=A[1..n],ordenado. ordenado. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Independência da Máquina © Jorge Figueiredo, DSC/UFCG Eficiência do Insertion Sort custo c1 c2 0 c4 c5 c6 c7 c8 vezes n n-1 n-1 n-1 ∑j=2n tj ∑j=2n(tj –1) ∑j=2n(tj –1) n –1 (tj é o número de vezes que o teste do laço na linha 5 é executado para o valor de j) O custo total é T(n) = soma de custo × vezes em cada linha =c1n + c2(n-1) + c4(n-1) + c5∑j=2n tj+ c6∑j=2n (tj-1)+ c7∑j=2n (tj-1)+ c8(n-1) Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG •• Pior Pior caso: caso: –– Maior Maior tempo tempo de de execução execução de de um um algoritmo algoritmo para para qualquer qualquer entrada entrada de de tamanho tamanho n.n. –– ÉÉ ootipo tipo mais mais utilizado. utilizado. Todos Todos gostam gostam de de garantia. garantia. •• Caso Caso médio: médio: –– Tempo Tempo esperado esperado de de um um algoritmo algoritmo sobre sobre todas todas as as entradas entradas de de tamanho tamanho n.n. –– Necessidade Necessidade de de usar usar distribuição distribuição estatística. estatística. •• Melhor Melhor caso: caso: –– Raramente Raramente éé feita. feita. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Eficiência do Insertion Sort (cont.) •• Como Como determinar determinar oo tempo tempo de de execução? execução? InsertionSort(A, n) for j ← 2 to n do chave ← A[j] //insere A[j] na parte ordenada A[1..j-1] i ← j-1 while i >0 e A[i]>chave do A[i+1] ← A[i] i ← i-1 A[i+1] ← chave Análise e Técnicas de Algoritmos – 2005.1 Tempo de Execução – Tipos de Análise •• Para Para comparar comparar os os diferentes diferentes algoritmos, algoritmos, de deforma forma justa, justa, éé necessário necessário definir definir um um modelo modelo abstrato abstrato de de máquina. máquina. •• Máquina Máquina de de Acesso Acesso Aleatório: Aleatório: –– Um Um único único processador processador genérico. genérico. –– Instruções Instruções executadas executadas sequencialmente, sequencialmente, sem semoperações operações concorrentes. concorrentes. –– Memória Memória ilimitada. ilimitada. –– Instrução Instrução básica básicatoma toma uma uma unidade unidade de de tempo. tempo. Análise e Técnicas de Algoritmos – 2005.1 •• O O algoritmo algoritmo éé eficiente? eficiente? •• O O tempo tempo de de execução execução de de um um algoritmo algoritmo depende depende da da cara cara da da entrada. entrada. •• Na Na análise análise do do tempo tempo de de execução, execução, aa parametrização parametrização éé baseada baseada no no tamanho tamanho da da entrada. entrada. •• AA análise análise do do tempo tempo de de execução, execução, éé uma uma forma forma de de definir definir eficiência. eficiência. •• Random-Access-Model Random-Access-Model (RAM) (RAM) © Jorge Figueiredo, DSC/UFCG •• Melhor Melhor caso: caso: números números já já ordenados ordenados –– tj=1, tj=1, ee linhas linhas 66 ee 77serão serão executadas executadas00 vezes vezes –– T(n) T(n) ==c1n c1n ++c2(n-1) c2(n-1) ++ c4(n-1) c4(n-1) ++ c5(n-1) c5(n-1) ++ c8(n-1) c8(n-1) =(c1 =(c1++c2 c2++c4 c4 ++c5 c5++c8)n c8)n –– (c2 (c2++c4 c4++c5 c5++c8) c8)==cn cn ++c‘c‘ •• Pior caso: números em ordem inversa Pior caso: números em ordem inversa –– tj=j tj=j nn tj = n(n+1)/2-1 e ∑ nn(tj –1) = n(n-1)/2, –– ∑∑j=2 j=2 tj = n(n+1)/2-1 e ∑j=2 j=2 (tj –1) = n(n-1)/2, –– T(n) T(n) == c1n c1n ++c2(n-1) c2(n-1) ++ c4(n-1) c4(n-1) ++ c5(n(n+1)/2 c5(n(n+1)/2 -1) -1) ++ c6(n(nc6(n(n1)/2 1)/2 -1) -1) ++ c7(n(n-1)/2)+ c7(n(n-1)/2)+ c8(n-1) c8(n-1) =((c5 =((c5 ++c6 c6++c7)/2)n2 c7)/2)n2 +(c1 +(c1 ++c2 c2++c4 c4+c5/2-c6/2-c7/2+c8)n+c5/2-c6/2-c7/2+c8)n2 (c2 (c2 ++c4 c4++c5 c5++c8) c8)==an an2+bn+c +bn+c Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG 5 Eficiência do Insertion Sort (cont.) •• Caso Caso médio: médio: números números aleatórios aleatórios –– Na Na média, média, ttj j== j/2 j/2 2 –– T(n) T(n) será será da da ordem ordem de de nn2,, mesmo mesmo que que no no pior pior caso. caso. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Ainda Sobre Análise de Algoritmos •• AA análise análise de de algoritmos algoritmos permite permite oo estudo estudo teórico teórico de de programas programas computacionais: computacionais: –– Desempenho. Desempenho. –– Utilização Utilização de de recursos. recursos. –– Corretude. Corretude. •• Estudo Estudo de de métodos, métodos, técnicas, técnicas, idéias, idéias,dicas dicas para para desenvolver desenvolver algoritmos algoritmos (eficientes). (eficientes). © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2005.1 Objetivos do Curso •• Importância Importância do do estudo estudo ee análise análise de de algoritmos: algoritmos: –– Ajuda Ajuda no no entendimento entendimentode de escalabilidade. escalabilidade. –– Permite Permite definir definir oo que que éé viável viável ee oo que que éé impossível. impossível. –– AA matemática matemática utilizada utilizada serve serve como como uma uma linguagem linguagem para para lidar lidar com com oo comportamento comportamento de de um um programa. programa. –– Provê Provê meios meios para para comparar comparar diferentes diferentessoluções soluções de de um um mesmo mesmo problema. problema. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Razões para Estudar Algoritmos Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG Razões para Estudar Algoritmos •• Evitar Evitar reinventar reinventar aa roda: roda: –– Existem Existem bons bons algoritmos algoritmos que que solucionam solucionam problemas problemas importantes. importantes. •• Ajudar Ajudar no no desenvolvimento desenvolvimento de de seus seus algoritmos: algoritmos: –– Nem Nem sempre sempre existe existe um um algoritmo algoritmo de de prateleira prateleira que que sirva sirva para para resolver resolver oo seu seu problema. problema. –– O O conhecimento conhecimento de de algoritmos algoritmos bem bemestabelecidos estabelecidos éé fonte fonte de de inspiração. inspiração. –– Muitos Muitos dos dos princípios princípios de de projetos projetos de de algoritmos algoritmos são são úteis úteis em em todos todos os os problemas problemas de de programação. programação. Análise e Técnicas de Algoritmos – 2005.1 1. 1. Aprender Aprender algoritmos algoritmos clássicos clássicos 2. 2. Aprender Aprender como como identificar/desenvolver identificar/desenvolver algoritmos algoritmos corretos corretos ee eficientes eficientes para para resolver resolver um um determinado determinado 3. 3. Aprender Aprender como como expressar expressar algoritmos algoritmos 4. 4. Aprender Aprender como como validar/verificar validar/verificar algoritmos algoritmos 5. 5. Aprender Aprender como como analisar analisar 6. 6. Aprender Aprender como como reutilizar reutilizar algoritmos algoritmos 7. 7. Aprender Aprender como como aplicar aplicar algoritmos algoritmos bastante bastante conhecidos. conhecidos. © Jorge Figueiredo, DSC/UFCG •• Ajudar Ajudar aa entender entender ferramentas ferramentas que que utilizam utilizam algoritmos algoritmos particulares. particulares. –– Por Por exemplo, exemplo, ferramentas ferramentas de de compressão compressão de de dados. dados. •• Útil Útil conhecer conhecer as as técnicas técnicas de de algoritmos algoritmos empregadas empregadas para para resolver resolver determinadas determinadas classes classes de de problemas. problemas. Análise e Técnicas de Algoritmos – 2005.1 © Jorge Figueiredo, DSC/UFCG 6