Escolar Documentos
Profissional Documentos
Cultura Documentos
Introducao Informal
Introducao Informal
Introduo Informal
O nosso curso sobre tcnicas e anlise de algoritmos O nosso curso sobre tcnicas e anlise de algoritmos (computacionais). (computacionais). O que um algoritmo? O que um algoritmo? Procedimento computacional que toma algum valor Procedimento computacional que toma algum valor (conjunto) como entrada e produz um valor (conjunto) como (conjunto) como entrada e produz um valor (conjunto) como sada. sada. Qual a diferena entre algoritmos e programas? Qual a diferena entre algoritmos e programas? Idia x texto descritivo Idia x texto descritivo humanos x computadores humanos x computadores
Problemas Computacionais
Especifica a relao entre a entrada e a sada desejada Especifica a relao entre a entrada e a sada desejada
Ordenao Entrada: Uma seqncia de n nmeros a1, a2, ..., an. Sada: Uma reordenao da seqncia de entrada a'1, a'2, ..., a'n, onde a'1 a'2 ... a'n.
Nmero Primo Entrada: Uma nmero natural q. Sada: sim ou no, dependendo se q primo.
Problemas Computacionais
Um instncia de um problema computacional um possvel Um instncia de um problema computacional um possvel valor para a entrada. valor para a entrada. 45, 7, 13, 23, 2 uma instncia para o problema da 45, 7, 13, 23, 2 uma instncia para o problema da ordenao. ordenao. 29 uma instncia para o problema dos nmeros primos. 29 uma instncia para o problema dos nmeros primos.
Cdigo
Controle Conciso Estrutura Formal
Cdigo
Controle Conciso Estrutura Formal
Pseudo-Cdigo
Reduzir ambiguidade Abstrair detalhes no importantes Fcil de ser assimilado por humanos
Insertion Sort
j
ORDENADO
A: chave
45
13
23
InsertionSort(A, n) for j 2 to n do chave A[j] insere A[j] na parte ordenada A[1..j-1] ij1 while i > 0 e A[i] > chave do A[i + 1] A[i] ii1 A[i + 1] chave
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG
45
13
23
45 7
7 45
13 13
23 23
2 2
45 7
7 45
13 13
23 23
2 2
45 7 7
7 45 13
13 13 45
23 23 23
2 2 2
45 7 7
7 45 13
13 13 45
23 23 23
2 2 2
45 7 7 7
7 45 13 13
13 13 45 23
23 23 23 45
2 2 2 2
45 7 7 7
7 45 13 13
13 13 45 23
23 23 23 45
2 2 2 2
45 7 7 7 2
7 45 13 13 7
13 13 45 23 13
23 23 23 45 23
2 2 2 2 45
Avaliao de Algoritmos
Propriedades: Propriedades: Corretude Corretude Simplicidade Simplicidade Eficincia Eficincia
Avaliao de Algoritmos
Corretude: Corretude: Um algoritmo est correto se para toda entrada (legal) ele Um algoritmo est correto se para toda entrada (legal) ele produz a sada correta. produz a sada correta.
Avaliao de Algoritmos
Simplicidade: Simplicidade: Benefcios pragmticos: Benefcios pragmticos: Fcil de ser entendido Fcil de ser entendido Fcil de implementar Fcil de implementar Fcil de manter Fcil de manter
Avaliao de Algoritmos
Eficincia (em funo do tamanho do problema/entrada): Eficincia (em funo do tamanho do problema/entrada): Tempo Tempo Quanto tempo leva para produzir a sada correta? Quanto tempo leva para produzir a sada correta? Espao Espao Quanto espao de memria necessrio? Quanto espao de memria necessrio?
j
ORDENADO
A: chave
InsertionSort(A, n) for j 2 to n do chave A[j] insere A[j] na parte ordenada A[1..j-1] ij1 while i > 0 e A[i] > chave do A[i + 1] A[i] ii1 A[i + 1] chave
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG
Independncia da Mquina
Para comparar os diferentes algoritmos, de forma justa, Para comparar os diferentes algoritmos, de forma justa, necessrio definir um modelo abstrato de mquina. necessrio definir um modelo abstrato de mquina. Mquina de Acesso Aleatrio: Mquina de Acesso Aleatrio: Um nico processador genrico. Um nico processador genrico. Instrues executadas sequencialmente, sem operaes Instrues executadas sequencialmente, sem operaes concorrentes. concorrentes. Memria ilimitada. Memria ilimitada. Instruo bsica toma uma unidade de tempo. Instruo bsica toma uma unidade de tempo.
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
custo c1 c2 0 c4 c5 c6 c7 c8
(tj o nmero de vezes que o teste do lao 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) + c5j=2n tj+ c6j=2n (tj-1)+ c7j=2n (tj-1)+ c8(n-1)
Objetivos do Curso
Importncia do estudo e anlise de algoritmos: Importncia do estudo e anlise de algoritmos: Ajuda no entendimento de escalabilidade. Ajuda no entendimento de escalabilidade. Permite definir o que vivel e o que impossvel. Permite definir o que vivel e o que impossvel. A matemtica utilizada serve como uma linguagem para A matemtica utilizada serve como uma linguagem para lidar com o comportamento de um programa. lidar com o comportamento de um programa. Prov meios para comparar diferentes solues de um Prov meios para comparar diferentes solues de um mesmo problema. mesmo problema. 1. Aprender algoritmos clssicos 1. Aprender algoritmos clssicos 2. Aprender como identificar/desenvolver algoritmos corretos e 2. Aprender como identificar/desenvolver algoritmos corretos e eficientes para resolver um determinado eficientes para resolver um determinado 3. Aprender como expressar algoritmos 3. Aprender como expressar algoritmos 4. Aprender como validar/verificar algoritmos 4. Aprender como validar/verificar algoritmos 5. Aprender como analisar 5. Aprender como analisar 6. Aprender como reutilizar algoritmos 6. Aprender como reutilizar algoritmos 7. Aprender como aplicar algoritmos bastante conhecidos. 7. Aprender como aplicar algoritmos bastante conhecidos.