ga-026: algoritmos i introdução

27
GA-026: Algoritmos I Introdu¸c˜ ao Prof. Luiz Gadelha ProgramadeP´os-Gradua¸c˜ ao em Modelagem Computacional, P4/2019 Laborat´orioNacionaldeComputa¸c˜ ao Cient´ ıfica 24 de setembro de 2019

Upload: others

Post on 12-Apr-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GA-026: Algoritmos I Introdução

GA-026: Algoritmos IIntroducao

Prof. Luiz Gadelha

Programa de Pos-Graduacao em Modelagem Computacional, P4/2019Laboratorio Nacional de Computacao Cientıfica

24 de setembro de 2019

Page 2: GA-026: Algoritmos I Introdução

Visao Geral do Curso

I Objetivo geral do curso:I Analise de complexidade de algoritmos.I Analise de correcao de algoritmos.I Tecnicas para projeto de algoritmos.I Algoritmos para problemas classicos:

I Ordenacao.I Busca.I Operacoes com Matrizes.I Grafos.

I Projeto e analise de algoritmos multiprocessados.

I Informacoes sobre o curso:I Atendimento as quartas de 15-16:30 na sala 2A-07.I Pagina do curso:

https://www.lncc.br/~lgadelha/GA026.html

2 / 27

Page 3: GA-026: Algoritmos I Introdução

Livro-texto da Parte I do Curso

I Cormen, T., Leiserson, C., Rivest, R., Stein, C. (2009).Introduction to Algorithms. MIT Press.

3 / 27

Page 4: GA-026: Algoritmos I Introdução

Avaliacao do Curso

I Agenda:I Exercıcios (30%).I Trabalho (35%).I Prova (35%).

I Trabalho:I Sobre algum algoritmo a combinar com o professor (p.ex. da

parte “Selected Topics” do livro-texto).I Apresentacao de 20min descrevendo o algoritmo, sua

complexidade e correcao.I Implementacao e demonstracao.I Relatorio de ate 10 paginas.

4 / 27

Page 5: GA-026: Algoritmos I Introdução

Agenda do Curso

I Agenda:

24/09 Introducao a Algoritmos, Ordenacao por insercao.26/09 Mergesort, Crescimento de funcoes, notacao assintotica.01/10 Dividir para conquistar: problema do sub-vetor maximo,

algoritmo de Strassen.03/10 Relacoes de recorrencia, metodo de substituicao.08/10 Relacoes de recorrencia, arvores de recorrencia, metodo mestre.10/10 Ordenacao: introducao, Heapsort.15/10 Ordenacao: Quicksort, analise de complexidade com arvores de

decisao.17/10 Busca: sequencial, arvores binarias de busca, tabelas de hash.22/10 Busca: tabelas de hash, arvores balanceadas.24/10 Algoritmos multiprocessados: introducao, multiplicacao de

matrizes.29/10 Algoritmos multiprocessados: mergesort.31/10 Tecnicas para projeto de algoritmos: programacao dinamica.

5 / 27

Page 6: GA-026: Algoritmos I Introdução

Agenda do Curso

I Agenda:

05/11 Tecnicas para projeto de algoritmos: programacao dinamica.07/11 Tecnicas para projeto de algoritmos: programacao dinamica.12/11 Tecnicas para projeto de algoritmos: algoritmos gulosos.14/11 Algoritmos para grafos: representacao, buscas em largura e

profundidade.19/11 Algoritmos para grafos: ordenacao topologica.21/11 Algoritmos para grafos: arvores de cobertura mınimas.26/11 Algoritmos para grafos: caminhos mınimos.28/11 Algoritmos para grafos: caminhos mınimos.03/12 Algoritmos para algebra linear: solucao de sistemas equacoes

lineares.05/12 Algoritmos para algebra linear: inversao de matrizes.10/12 Apresentacoes de trabalhos.12/12 Apresentacoes de trabalhos.17/12 Prova.

6 / 27

Page 7: GA-026: Algoritmos I Introdução

Algoritmos

I Um algoritmo e um procedimento computacional bemdefinido que toma um ou mais valores como entrada e produzum ou mais valores como saıda.

I Pode ser visto tambem como uma ferramenta para resolverum problema computacional bem especificado.

I O problema define a relacao entre a entrada e a saıda.

I O algoritmo descreve um procedimento computacional paraobter a relacao entre a entrada e a saıda.

7 / 27

Page 8: GA-026: Algoritmos I Introdução

Algoritmos

I O problema da ordenacao (ordenar nao-decrescentementeuma sequencia de numeros):

I Entrada: Uma sequencia de n numeros 〈a1, a2, . . . , an〉.I Saıda: Uma permutacao da sequencia de entrada〈a′1, a′2, . . . , a′n〉 tal que a′1 ≤ a′2 ≤ · · · ≤ a′n.

I P.ex. Dada a sequencia de entrada 〈34, 76, 45, 98, 12, 64, 47〉,um algoritmo de ordenacao deve gerar como saıda a sequencia〈12, 34, 45, 47, 64, 76, 98〉.

8 / 27

Page 9: GA-026: Algoritmos I Introdução

Algoritmos

I Um algoritmo e considerado correto quando, para cadainstancia de entrada, ele para produzindo a saıda correta (i.e.a saıda definida pelo problema computacional).

I Neste caso, dizemos que o algoritmo soluciona o problemacomputacional.

I Algoritmos incorretos podem nao parar para determinadasinstancias de entrada ou produzir saıdas incorretas.

I Algoritmos incorretos podem ser uteis tambem, quando umaaproximacao para a saıda esperada e suficiente.

I Pode ser que existam problemas computacionais para os quaisnao existam algoritmos que os solucionem (problemasindecidıveis).

9 / 27

Page 10: GA-026: Algoritmos I Introdução

Algoritmos

I O Problema da Correspondencia de Post e um exemplo deproblema indecidıvel.

I Dados um conjunto de dominos da forma:

a1a2 . . . anb1b2 . . . bm

onde a1a2 . . . an e b1b2 . . . bm sao palavras de um alfabeto.

I O problema consiste de determinar se e possıvel colocar osdominos em uma sequencia tal que se tenha a mesma palavrana parte de cima e na parte de baixo dos dominos.

10 / 27

Page 11: GA-026: Algoritmos I Introdução

Aplicacoes de Algoritmos

I Na bioinformatica as sequencias biologicas obtidas comsequenciadores precisam:

I ter seus fragmentos montados para obtencao de sequenciascompletas;

I montagem de grafos de de Bruijn e identificacao de caminhosEulerianos nos mesmos;

I ser comparadas com sequencias existentes em bancos de dadosde sequencias (p.ex. GenBank) para identificacao;

I algoritmos para casamento aproximado de caracteres (p.ex.Smith-Waterman);

11 / 27

Page 12: GA-026: Algoritmos I Introdução

Aplicacoes de Algoritmos

I A Internet apresenta diversos problemas que requeremalgoritmos:

I Roteamento de pacotes TCP/IP.I algoritmos para grafos;

I Busca de paginas na web.I busca por palavras/termos em textos na web;I contagem de referencias a uma pagina (PageRank);

I Comercio eletronico seguro.I algoritmo RSA para criptografia de chaves publicas (teoria dos

numeros);

12 / 27

Page 13: GA-026: Algoritmos I Introdução

Ordenacao por Insercao

I O algoritmo de ordenacao por insercao soluciona oproblema de ordenacao.

I O problema da ordenacao (ordenar nao-decrescentementeuma sequencia de numeros):

I Entrada: Uma sequencia de n numeros 〈a1, a2, . . . , an〉.I Saıda: Uma permutacao da sequencia de entrada〈a′1, a′2, . . . , a′n〉 tal que a′1 ≤ a′2 ≤ · · · ≤ a′n.

I Chamaremos os elementos da sequencia de chaves.

13 / 27

Page 14: GA-026: Algoritmos I Introdução

Ordenacao por Insercao

I O algoritmo de ordenacao por insercao (ou InsertionSort)soluciona o problema de ordenacao.

I O problema da ordenacao (ordenar nao-decrescentementeuma sequencia de numeros):

I Entrada: Uma sequencia de n numeros 〈a1, a2, . . . , an〉.I Saıda: Uma permutacao da sequencia de entrada〈a′1, a′2, . . . , a′n〉 tal que a′1 ≤ a′2 ≤ · · · ≤ a′n.

I Chamaremos os elementos da sequencia de chaves.

14 / 27

Page 15: GA-026: Algoritmos I Introdução

Ordenacao por Insercao

I Ideia basica:I Uma parte da sequencia ja esta ordenada (que representaremos

em azul).I Uma chave (que representaremos em vermelho) adjacente a

essa parte e inserida na mesma.

I Exemplo de ordenacao por insercao:

〈12, 4, 75, 34, 28, 9〉

〈4, 12, 75, 34, 28, 9〉

〈4, 12, 75, 34, 28, 9〉

〈4, 12, 34, 75, 28, 9〉

〈4, 12, 28, 34, 75, 9〉

〈4, 9, 12, 28, 34, 75〉

15 / 27

Page 16: GA-026: Algoritmos I Introdução

Ordenacao por Insercao

1: procedure InsertionSort(A[1, . . . , n])2: for j ← 2 to j ≤ A.lenght do3: key ← A[j ]4: i ← j − 15: while i > 0 and A[i ] > key do6: A[i + 1]← A[i ]7: i ← i − 18: end while9: A[i + 1]← key

10: end for11: end procedure

16 / 27

Page 17: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Correcao

I Uma maneira para demonstrar que um invariante de laco(IdL), uma propriedade se mantem valido ao longo dasiteracoes.

I No caso da ordenacao um IdL e dado por:I a subsequencia A[1, . . . , j − 1] esta ordenada e e constituıda

por uma permutacao dos elementos que originalmente estavamnessas posicoes.

I Podemos usar inducao matematica para demonstrar o IdL.

17 / 27

Page 18: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Correcao

I para j = 2, a subsequencia A[1, . . . , 1] e unitaria, enaturalmente ordenada;

I como nenhum elemento foi deslocado ainda, e constituıda poruma permutacao do elemento que originalmente estava nessaposicao.

I Logo a IdL e valida antes da primeira iteracao do algoritmo.

18 / 27

Page 19: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Correcao

I para uma iteracao onde j = k (2 < k ≤ n)I o algoritmo desloca para a direita os elementos

A[k − 1],A[k − 2], . . . ate encontrar um que seja menor queA[k], onde ele e inserido;

I assim, o algoritmo mantem A[1, . . . , k] ordenada e como umapermutacao desses elementos.

I Assim a IdL se mantem valida apos uma iteracao do algoritmo.

19 / 27

Page 20: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Correcao

I O laco for termina pois a cada iteracao j e incrementado, oque garante que a condicao de parada sera satifeita(j > A.lenght).

I Nesse momento, o valor de j sera n + 1.

I Pelo IdL, sabemos que A[1, . . . , n] esta ordenada e e umapermutacao da sequencia original.

I Logo, o algoritmo e correto!

20 / 27

Page 21: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Analise de Complexidade

1: procedure InsertionSort(A[1, . . . , n]) . Custo, Vezes2: for j ← 2 to j ≤ A.lenght do . c1, n3: key ← A[j ] . c2, n − 14: i ← j − 1 . c3, n − 15: while i > 0 and A[i ] > key do . c4,

∑nj=2 tj

6: A[i + 1]← A[i ] . c5,∑n

j=2 (tj − 1)7: i ← i − 1 . c6,

∑nj=2 (tj − 1)

8: end while9: A[i + 1]← key . c7, n − 1

10: end for11: end procedure

21 / 27

Page 22: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Analise de Complexidade

Custo total:

T (n) = c1n + c2(n − 1) + c3(n − 1) + c4

n∑j=2

tj+

c5

n∑j=2

(tj − 1) + c6

n∑j=2

(tj − 1) + c7(n − 1) =

c4

n∑j=2

tj + (c5 + c6)n∑

j=2

(tj − 1) + (c1 + c2 + c3 + c7)n− c2− c3− c7

22 / 27

Page 23: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Analise de Complexidade

Melhor caso (lista ja ordenada), tj = 1:

T (n) = c4

n∑j=2

tj+(c5+c6)n∑

j=2

(tj − 1)+(c1+c2+c3+c7)n−c2−c3−c7

= c4(n − 1) + (c5 + c6)0 + (c1 + c2 + c3 + c7)n − c2 − c3 − c7

= (c4 + c1 + c2 + c3 + c7)n − c2 − c3 − c7 − c4

= an − b

Logo, T (n) e uma funcao linear de n.

23 / 27

Page 24: GA-026: Algoritmos I Introdução

Ordenacao por Insercao: Analise de Complexidade

Pior caso (lista reversamente ordenada), tj = j :

T (n) = c4

n∑j=2

tj+(c5+c6)n∑

j=2

(tj − 1)+(c1+c2+c3+c7)n−c2−c3−c7

= c4(n(n + 1)

2−1)+(c5+c6)

n(n − 1)

2+(c1+c2+c3+c7)n−c2−c3−c7

=c4 + c5 + c6

2n2+(

c4 − c5 − c6

2+c1+c2+c3+c7)n−c4

2−c2−c3−c7

= an2 + bn + c

Logo, T (n) e uma funcao quadratica de n.

24 / 27

Page 25: GA-026: Algoritmos I Introdução

Analise de Complexidade

I No caso da ordenacao por insercao, analisamos o melhor epior caso para o tempo de execucao.

I Seria possıvel analisar o caso medio tambem (exercıcio).

I E comum analisar apenas pior caso:I e um limite superior para o tempo de execucao, assegura que

nao levaria mais tempo que esse limite;I o pior caso pode ocorrer com frequencia (busca de uma

informacao ausente em um banco de dados);I o caso medio frequentemente tem a mesma ordem de grandeza

(p.ex. pior e melhor caso quadraticos).

I A analise em caso medio e mais difıcil pois as vezes nao eclaro o que seria o caso medio mas esta pode ser apoiada poranalise probabilıstica.

25 / 27

Page 26: GA-026: Algoritmos I Introdução

Analise de Complexidade: Ordem de Crescimento

I No caso da ordenacao por insercao, o tempo de execucao nopior caso e da forma an2 + bn + c .

I Para n grande, bn + c sao menos relevantes para determinar ocomportamento de crescimento de T (n).

I O coeficiente do termo que domina o crescimento da funcao,an2 tambem pode ser ignorado.

I Assim, podemos dizer que a ordenacao por insercao temtempo de execucao Θ(n2) no pior caso.

26 / 27

Page 27: GA-026: Algoritmos I Introdução

Obrigado!

E-mail: [email protected]

27 / 27