Você está na página 1de 6

Agenda

Introduo Informal Introduo Informal Motivao Motivao

Anlise e Tcnicas de Algoritmos


Jorge Figueiredo

Viso Geral do Curso Viso Geral do Curso

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Como Descrever Algoritmos?


Utilizar uma linguagem. Qual? Utilizar uma linguagem. Qual? Linguagem natural (portugus ou ingls). Linguagem natural (portugus ou ingls). Linguagem de programao. Linguagem de programao. Problemas: Problemas: Ambiguidade Ambiguidade Estruturao Estruturao Prolixidade Prolixidade Inadequao para programao Inadequao para programao

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Como descrever algoritmos?


Linguagem Natural
Expressividade Flexibilidade

Como descrever algoritmos?


Linguagem Natural
Expressividade Flexibilidade

Cdigo
Controle Conciso Estrutura Formal

Cdigo
Controle Conciso Estrutura Formal

Pseudo-Cdigo
Reduzir ambiguidade Abstrair detalhes no importantes Fcil de ser assimilado por humanos

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Insertion Sort

Exemplo do 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

Exemplo do Insertion Sort

Exemplo do Insertion Sort

45

13

23

45 7

7 45

13 13

23 23

2 2

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Exemplo do Insertion Sort

Exemplo do Insertion Sort

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Exemplo do Insertion Sort

Exemplo do Insertion Sort

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Exemplo do Insertion Sort

Exemplo do Insertion Sort

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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?

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Como provar a corretude de um algoritmo?


No uma tarefa simples No uma tarefa simples Testes no so suficientes: servem apenas para mostrar que Testes no so suficientes: servem apenas para mostrar que um algoritmo tem erros. um algoritmo tem erros. Ferramentas utilizadas: Ferramentas utilizadas: Invariantes de lao Invariantes de lao Funo recursiva Funo recursiva Prova por induo Prova por induo

Corretude do Insertion Sort

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Corretude do Insertion Sort


Invariante de lao: Invariante de lao: No incio de cada iterao do lao, o subarray A[1..j-1] No incio de cada iterao do lao, o subarray A[1..j-1] contm os elementos originais de A[1..j-1] mas, ordenados. contm os elementos originais de A[1..j-1] mas, ordenados. Prova: Prova: Inicializao :: j=2, A[1..j-1]=A[1..1]=A[1], ordenado. Inicializao j=2, A[1..j-1]=A[1..1]=A[1], ordenado. Manuteno: cada iterao preserva o invariante. Manuteno: cada iterao preserva o invariante. Trmino: j=n+1, ento A[1..j-1]=A[1..n], ordenado. Trmino: j=n+1, ento A[1..j-1]=A[1..n], ordenado.

Eficincia do Insertion Sort


O algoritmo eficiente? O algoritmo eficiente? O tempo de execuo de um algoritmo depende da cara da O tempo de execuo de um algoritmo depende da cara da entrada. entrada. Na anlise do tempo de execuo, a parametrizao Na anlise do tempo de execuo, a parametrizao baseada no tamanho da entrada. baseada no tamanho da entrada. A anlise do tempo de execuo, uma forma de definir A anlise do tempo de execuo, uma forma de definir eficincia. eficincia. Random-Access-Model (RAM) Random-Access-Model (RAM)

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Tempo de Execuo Tipos de Anlise


Pior caso: Pior caso: Maior tempo de execuo de um algoritmo para qualquer Maior tempo de execuo de um algoritmo para qualquer entrada de tamanho n. entrada de tamanho n. o tipo mais utilizado. Todos gostam de garantia. o tipo mais utilizado. Todos gostam de garantia. Caso mdio: Caso mdio: Tempo esperado de um algoritmo sobre todas as entradas Tempo esperado de um algoritmo sobre todas as entradas de tamanho n. de tamanho n. Necessidade de usar distribuio estatstica. Necessidade de usar distribuio estatstica. Melhor caso: Melhor caso: Raramente feita. Raramente feita.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Eficincia do Insertion Sort


Como determinar o tempo de execuo? Como determinar o tempo de execuo?

Eficincia do Insertion Sort (cont.)


Melhor caso: nmeros j ordenados Melhor caso: nmeros j ordenados tj=1, e linhas 6 e 7 sero executadas 0 vezes tj=1, e linhas 6 e 7 sero executadas 0 vezes T(n) = c1n + c2(n-1) + c4(n-1) + c5(n-1) + c8(n-1) T(n) = c1n + c2(n-1) + c4(n-1) + c5(n-1) + c8(n-1) =(c1 + c2 + c4 + c5 + c8)n (c2 + c4 + c5 + c8) = cn + c =(c1 + c2 + c4 + c5 + c8)n (c2 + c4 + c5 + c8) = cn + c Pior caso: nmeros em ordem inversa Pior caso: nmeros em ordem inversa tj=j tj=j j=2nn tj = n(n+1)/2-1 e j=2nn(tj 1) = n(n-1)/2, j=2 tj = n(n+1)/2-1 e j=2 (tj 1) = n(n-1)/2, T(n) = c1n + c2(n-1) + c4(n-1) + c5(n(n+1)/2 -1) + c6(n(n T(n) = c1n + c2(n-1) + c4(n-1) + c5(n(n+1)/2 -1) + c6(n(n1)/2 -1) + c7(n(n-1)/2)+ c8(n-1) 1)/2 -1) + c7(n(n-1)/2)+ c8(n-1) =((c5 + c6 + c7)/2)n2 +(c1 + c2 + c4 +c5/2-c6/2-c7/2+c8)n=((c5 + c6 + c7)/2)n2 +(c1 + c2 + c4 +c5/2-c6/2-c7/2+c8)n(c2 + c4 + c5 + c8) = an22+bn+c (c2 + c4 + c5 + c8) = an +bn+c
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG

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

vezes n n-1 n-1 n-1 j=2n tj j=2n(tj 1) j=2n(tj 1) n 1

(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)

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Eficincia do Insertion Sort (cont.)


Caso mdio: nmeros aleatrios Caso mdio: nmeros aleatrios Na mdia, ttj= j/2 Na mdia, j = j/2 T(n) ser da ordem de n22, mesmo que no pior caso. T(n) ser da ordem de n , mesmo que no pior caso.

Ainda Sobre Anlise de Algoritmos


A anlise de algoritmos permite o estudo terico de programas A anlise de algoritmos permite o estudo terico de programas computacionais: computacionais: Desempenho. Desempenho. Utilizao de recursos. Utilizao de recursos. Corretude. Corretude. Estudo de mtodos, tcnicas, idias, dicas para desenvolver Estudo de mtodos, tcnicas, idias, dicas para desenvolver algoritmos (eficientes). algoritmos (eficientes).

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Razes para Estudar Algoritmos


Evitar reinventar a roda: Evitar reinventar a roda: Existem bons algoritmos que solucionam problemas Existem bons algoritmos que solucionam problemas importantes. importantes. Ajudar no desenvolvimento de seus algoritmos: Ajudar no desenvolvimento de seus algoritmos: Nem sempre existe um algoritmo de prateleira que sirva Nem sempre existe um algoritmo de prateleira que sirva para resolver o seu problema. para resolver o seu problema. O conhecimento de algoritmos bem estabelecidos fonte O conhecimento de algoritmos bem estabelecidos fonte de inspirao. de inspirao. Muitos dos princpios de projetos de algoritmos so teis Muitos dos princpios de projetos de algoritmos so teis em todos os problemas de programao. em todos os problemas de programao.

Razes para Estudar Algoritmos


Ajudar a entender ferramentas que utilizam algoritmos Ajudar a entender ferramentas que utilizam algoritmos particulares. particulares. Por exemplo, ferramentas de compresso de dados. Por exemplo, ferramentas de compresso de dados. til conhecer as tcnicas de algoritmos empregadas para til conhecer as tcnicas de algoritmos empregadas para resolver determinadas classes de problemas. resolver determinadas classes de problemas.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Você também pode gostar