Buscar

Análise e Projeto de Algoritmos

Prévia do material em texto

Ana´lise e Projeto de Algoritmos
Prof. Dr. Jesmmer Alves∗
Instituto Federal Goiano Campus Morrinhos
Curso Bacharelado em Cieˆncia da Computac¸a˜o
∗
jesmmer.alves@ifgoiano.edu.br
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 1 / 47
Agenda
1 Introduc¸a˜o
2 Primeiros Passos
3 Ana´lise de um Algoritmo
Busca Sequencial e Busca Bina´ria
Insertion Sort
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 2 / 47
Introduc¸a˜o - Disciplina
Ana´lise e Projeto de Algoritmos - 73.33h
Medidas de Complexidade, Ana´lise Assinto´tica de Limites de Complex-
idade, Te´cnicas de Prova de Cotas Inferiores. Notac¸a˜o Big O, Little o,
Omega e Theta. Medidas Emp´ıricas de Performance. O Uso de Relac¸o˜es
de Recorreˆncia para Ana´lise de Algoritmos Recursivos. Ana´lise de Al-
goritmos Iterativos e Recursivos. Classes de Problemas P, NP, NP-
Completo e NP-Dif´ıcil.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 3 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Algoritmos 1
Um algoritmo e´ qualquer procedimento computacional bem definido
que recebe um valor, ou conjunto de valores, como entrada e produz
um valor, ou conjunto de valores, como sa´ıda.
Algoritmos 2
Um algoritmo e´ uma sequeˆncia computacional de passos que
transforma uma entrada em uma sa´ıda.
Algoritmos 3
Um algoritmo e´ uma ferramenta para resolver problemas
computacionais bem definidos.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 4 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Problemas
Tipos de Problemas
Bem definidos
Mal definidos
Me´todos para resolver problemas
Tentativa e erro
Algoritmo (determin´ıstico)
Heur´ıstica (na˜o determin´ıstico)
Tomada de decisa˜o (viabilidade, representatividade)
Tendeˆncias (confianc¸a, crenc¸a, efeito de enquadramento)
Problemas Dif´ıceis
NP, NP-Completo, NP-Dif´ıcil
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 5 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Algoritmos
Dados de entrada e sa´ıda
Entrada: xa1, a2, ¨ ¨ ¨ , any.
Sa´ıda: xa11, a12, ¨ ¨ ¨ , a1ny tal que: a11 ď a12 ď ¨ ¨ ¨ ,ď a1n.
Instaˆncia de um problema
x31, 41, 59, 26, 41, 58y
Algoritmo correto
O algoritmo pa´ra e apresenta a soluc¸a˜o correta
Algoritmo incorreto?
Finitude
Corretude
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 6 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Eficieˆncia de um Algoritmo
Um olhar no porvir
O qua˜o eficiente esta´ meu algoritmo?
espac¸o, tempo
Como podemos analisar um algoritmo para prever o montante de
tempo necessa´rio?
Como podemos relacionar ac¸o˜es/escolhas com eficieˆncia?
Por que devemos preocupar com isto?
Precisamos vender :)
Computadores esta˜o mais ra´pidos, mas os problemas esta˜o
maiores
Em 2014, Google disponibilizou 30,000,000,000,000 pa´ginas na
web, aproximadamente 100,000,000 GB
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 7 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
1 Medir com um timer
2 Contar o nu´mero de operac¸o˜es
3 Noc¸a˜o abstrata da ordem de crescimento
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 8 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
1 Medir com um timer
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 9 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
1 Medir com um timer
o tempo varia entre algoritmos
o tempo varia entre implementac¸o˜es
o tempo varia entre computadores
dif´ıcil determinar para pequenas entradas
2 Contar o nu´mero de operac¸o˜es
3 Noc¸a˜o abstrata da ordem de crescimento
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 10 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
2 Contar o nu´mero de operac¸o˜es
Assuma passos com tempo constante
operac¸o˜es matema´ticas; comparac¸o˜es; atribuic¸o˜es; acessar valor de
uma varia´vel, etc.
Identifique o nu´mero de operac¸o˜es com relac¸a˜o ao tamanho da
entrada n
void impares( int n ){
 int i = 1;
 while (i <= n){
 if (i % 2 != 0)
 cout << i << " ";
 i++;
 }
 cout << "Fim";
}
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 11 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
2 Contar o nu´mero de operac¸o˜es
Assuma passos com tempo constante
operac¸o˜es matema´ticas; comparac¸o˜es; atribuic¸o˜es; acessar valor de
uma varia´vel, etc.
Identifique o nu´mero de operac¸o˜es com relac¸a˜o ao tamanho da
entrada n
void impares( int n ){
 int i = 1; 1 op.
 while (i <= n){ n +1 op.
 if (i % 2 != 0) 2 op.
 cout << i << " "; 1 op.
 i++; 1 op.
 }
 cout << "Fim"; 1 op. 
} n + 7 op.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 12 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
1 Medir com um timer
2 Contar o nu´mero de operac¸o˜es
contagem depende do algoritmo
contagem depende da implementac¸a˜o
contagem na˜o depende do computadores
quais operac¸o˜es contar
contagem varia para diferentes entradas e podemos calcular a
relac¸a˜o contagem ˆ entrada
3 Noc¸a˜o abstrata da ordem de crescimento
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 13 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
3 Noc¸a˜o abstrata da ordem de crescimento
considere entradas muito grandes
operac¸o˜es ba´sicas na˜o sa˜o importantes
relacione o tempo com o tamanho da entrada
expressar eficieˆncia em termos do tamanho da entrada
void impares( int n ){
 int i = 1;
 while (i <= n){
 if (i % 2 != 0)
 cout << i << " ";
 i++;
 }
 cout << "Fim";
}
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 14 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
3 Noc¸a˜o abstrata da ordem de crescimento
considere entradas muito grandes
operac¸o˜es ba´sicas na˜o sa˜o importantes
relacione o tempo com o tamanho da entrada
expressar eficieˆncia em termos do tamanho da entrada
void impares( int n ){
 int i = 1; 1 op.
 while (i <= n){ n +1 op.
 if (i % 2 != 0) 2 op.
 cout << i << " "; 1 op.
 i++; 1 op.
 }
 cout << "Fim"; 1 op . 
} n + 7 op. (custo n)
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 15 / 47
Introduc¸a˜o - Definic¸o˜es Ba´sicas
Como avaliar a eficieˆncia de um Algoritmo?
3 Noc¸a˜o abstrata da ordem de crescimento
considere entradas muito grandes
operac¸o˜es ba´sicas na˜o sa˜o importantes
relacione o tempo com o tamanho da entrada
expressar eficieˆncia em termos do tamanho da entrada
void poli ( int n ){
 int i = 1; -
 while (i <= n){ n op.
 for (j = 1; j <= n; j++){ n op. 
 cout << i + j; -
 }
 i++;
 } - 
} n2 op. (custo n2 )
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 16 / 47
Agenda
1 Introduc¸a˜o
2 Primeiros Passos
3 Ana´lise de um Algoritmo
Busca Sequencial e Busca Bina´ria
Insertion Sort
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 17 / 47
Primeiros Passos
Invariantes de Lac¸o
Demostrar que uma afirmativa e´ verdadeira no in´ıcio, cada vez que
acontecer uma iterac¸a˜o de lac¸o e quando o lac¸o terminar.
Passos em uma invariante de lac¸o
Inicializac¸a˜o: e´ verdadeira antes da primeira iterac¸a˜o do lac¸o;
Manutenc¸a˜o: se e´ verdadeira antes da iterac¸a˜o do lac¸o,
permanecera´ verdadeira antes da pro´xima iterac¸a˜o;
Terminac¸a˜o: o lac¸o termina e, quando termina, a invariante do
lac¸o, juntamente com a raza˜o do te´rmino do lac¸o, nos da´ uma
propriedade u´til.
Prof.Dr. Jesmmer Alves APA Julho 23, 2019 18 / 47
Primeiros Passos
Sugesto˜es para definir e mostrar o Invariante de Lac¸o
Na˜o existe uma resposta simples
Entenda exatamente o que esta´ sendo feito
Escreva os passos dentro do corpo do lac¸o
Certifique que o invariante de lac¸o e´ u´til
O lac¸o resolve algum problema?
O invariante de lac¸o deve concluir que o problema a ser resolvido
no lac¸o foi resolvido
Mantenha o invariante de lac¸o o mais simples poss´ıvel (isto e´ uma
arte!)
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 19 / 47
Primeiros Passos
Invariantes de Lac¸o - Exemplo Trivial
Invariante: o lac¸o escreve todos os elementos de um arranjo
Inicializac¸a˜o: o lac¸o na˜o acessou nenhum elemento do arranjo A
e na˜o escreveu nenhum elemento, portanto o invariante e´
verdadeiro.
Entrada: inteiro na˜o-negativo n; arranjo A
Sa´ıda: escrever os elementos do arranho A
i “ 1;
enquanto i ď n fac¸a
Escreva Aris;
i “ i` 1;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 20 / 47
Primeiros Passos
Invariantes de Lac¸o - Exemplo Trivial
Invariante: o lac¸o escreve todos os elementos de um arranjo
Manutenc¸a˜o: a cada iterac¸a˜o no lac¸o, e´ escrito um elemento do
arranjo A de acordo com a varia´vel i. Desce que i comec¸a na
primeira posic¸a˜o do arranjo e e´ incrementado em 1 a cada nova
iterac¸a˜o, o invariante e´ verdadeiro.
Entrada: inteiro na˜o-negativo n; arranjo A
Sa´ıda: escrever os elementos do arranho A
i “ 1;
enquanto i ď n fac¸a
Escreva Aris;
i “ i` 1;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 21 / 47
Primeiros Passos
Invariantes de Lac¸o - Exemplo Trivial
Invariante: o lac¸o escreve todos os elementos de um arranjo
Terminac¸a˜o: apo´s terminar o lac¸o, i “ n, e todos os n elementos
do arranjo A foram escritos.
Entrada: inteiro na˜o-negativo n; arranjo A
Sa´ıda: escrever os elementos do arranho A
i “ 1;
enquanto i ď n fac¸a
Escreva Aris;
i “ i` 1;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 22 / 47
Primeiros Passos
Invariantes de Lac¸o - Soma de Elementos
Invariante: Soma “ 1` 2` ¨ ¨ ¨ ` pi´ 1q
Inicializac¸a˜o: o invariante de lac¸o e´ verdadeiro desde que
Soma “ 0 e i “ 1 neste ponto.
Entrada: inteiro na˜o-negativo n
Sa´ıda: a soma 1` 2` ¨ ¨ ¨ ` n
Soma “ 0;
i “ 1;
enquanto i ď n fac¸a
Soma “ Soma` i;
i “ i` 1;
fim
Retorne Soma;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 23 / 47
Primeiros Passos
Invariantes de Lac¸o - Soma de Elementos
Invariante: Soma “ 1` 2` ¨ ¨ ¨ ` pi´ 1q
Manutenc¸a˜o: assumindo que o invariante e´ verdadeiro antes da
i-e´sima interac¸a˜o, sera´ verdadeiro tambe´m depois desta interac¸a˜o
desde que o lac¸o adiciona i a Soma e incremente i em um.
Entrada: inteiro na˜o-negativo n
Sa´ıda: a soma 1` 2` ¨ ¨ ¨ ` n
Soma “ 0;
i “ 1;
enquanto i ď n fac¸a
//Invariante: Soma “ 1` 2` ¨ ¨ ¨ ` pi´ 1q;
Soma “ Soma` i;
i “ i` 1;
fim
Retorne Soma;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 24 / 47
Primeiros Passos
Invariantes de Lac¸o - Soma de Elementos
Invariante: Soma “ 1` 2` ¨ ¨ ¨ ` pi´ 1q
Terminac¸a˜o: quando o lac¸o terminar, o invariante define que
Soma “ 1` 2` ¨ ¨ ¨ ` n, exatamente o que e´ necessa´rio para que o
algoritmo esteja correto.
Entrada: inteiro na˜o-negativo n
Sa´ıda: a soma 1` 2` ¨ ¨ ¨ ` n
Soma “ 0;
i “ 1;
enquanto i ď n fac¸a
//Invariante: Soma “ 1` 2` ¨ ¨ ¨ ` pi´ 1q;
Soma “ Soma` i;
i “ i` 1;
fim
Retorne Soma;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 25 / 47
Primeiros Passos
Atividades
1 O seguinte problema esta´ bem definido? Porque?
Em func¸a˜o da crise financeira mundial tem crescido os investimentos na
poupanc¸a programada, pois e´ um investimento renta´vel e com baix´ıssimo
risco. Um professor de administrac¸a˜o financeira do IF Goiano deseja sim-
ular investimentos na poupanc¸a programada para ensinar seus alunos a
driblarem a crise. Fac¸a um programa que atenda a solicitac¸a˜o desse profes-
sor, considerando que a poupanc¸a rende 5% ao meˆs, sendo tempo e capital
programados pelo investidor com isenc¸a˜o total do imposto de renda.
2 Apresente um um algoritmo determin´ıstico e uma heur´ıstica.
3 Qual o propo´sito do invariante de lac¸o? Escreva um algoritmo para
mostrar o maior valor de um arranjo. Defina o invariante de lac¸o
para este algoritmo. Mostre que o invariante de lac¸o e´ verdadeiro
antes, apo´s cada iterac¸a˜o e no te´rmino do lac¸o.
4 Determine os custos e os invariantes de lac¸o para a busca sequencial
e para a busca bina´ria.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 26 / 47
Agenda
1 Introduc¸a˜o
2 Primeiros Passos
3 Ana´lise de um Algoritmo
Busca Sequencial e Busca Bina´ria
Insertion Sort
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 27 / 47
Informac¸o˜es Ba´sicas
Ana´lise de um Algoritmo
Corretude:
invariante de lac¸o, induc¸a˜o, prova direta, contradic¸a˜o, etc.
Performance
Identificar recursos necessa´rios (memo´ria, hardware, tempo de
computac¸a˜o, etc.)
Identificar um algoritmo mais eficiente
Instruc¸o˜es executadas em sequeˆncia
Na˜o usamos caches ou memo´ria virtual
O tempo necessa´rio depende da entrada
Tamanho da entrada?
itens em um arranjo, bits, ve´rtices, . . .
Noc¸a˜o abstrata da ordem de crescimento
Tempo de execuc¸a˜o da i-e´sima linha ci.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 28 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Sequencial
Invariante de Lac¸o: antes de cada iterac¸a˜o do lac¸o, o subarranjo
Ar0 . . . i´ 1s consiste dos elementos que sa˜o diferentes de x.
Inicializac¸a˜o: inicialmente o subarranjo esta´ vazio, portanto o in-
variante e´ va´lido.
Entrada: arranjo A; nu´mero de elementos n; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
para pi “ 0; i ă n; i``q fac¸a
se pAris ““ xq enta˜o
retorne i;
fim
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 29 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Sequencial
Invariante de Lac¸o: antes de cada iterac¸a˜o do lac¸o, o subarranjo
Ar0 . . . i´ 1s consiste dos elementos que sa˜o diferentes de x.
Manutenc¸a˜o: em cada iterac¸a˜o, se pAris ““ xq o lac¸o termina e o
resultado esta´ correto. Sena˜o segue para a pro´xima iterac¸a˜o. Neste
caso, sabe-se que Ar1 . . . i´1s na˜o conte´m x e verifica-se novamente
se Aris e´ diferente de x, portanto o invariante e´ va´lido.
Entrada: arranjo A; nu´mero de elementos n; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
para pi “ 0; i ă n; i``q fac¸a
se pAris ““ xq enta˜o
retorne i;
fim
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 30 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Sequencial
Invariante de Lac¸o: antes de cada iterac¸a˜o do lac¸o, o subarranjo
Ar0 . . . i´ 1s consiste dos elementos que sa˜o diferentes de x.
Terminac¸a˜o: o lac¸o termina quando i “ n. Desde que i comec¸a em
0, e´ incrementado em 1 a cada iterac¸a˜o e i ě n, todos os elementos
em A foram verificados e x na˜o esta´ entre eles, retornando ´1.
Portanto o invariante e´ va´lido.
Entrada: arranjo A; nu´mero de elementos n; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
para pi “ 0; i ă n; i``q fac¸a
se pAris ““ xq enta˜o
retorne i;
fim
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 31 / 47
Busca Sequencial e Busca Bina´ria
Performance (Aproximado)- Busca Sequencial
Considere n grande
Desconsidere tempo/custo constante
Simplifique!
Entrada: A; n; x.
Sa´ıda: ı´ndice de x em A, ou ´1.
para pi “ 0; i ă n; i``q fac¸a
se pAris ““ xq enta˜o
retorne i;
fim
fim
retorne ´1;
n
´
´
´
´
´
n
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 32 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Bina´ria
Invariante de Lac¸o: o arranjo esta´ ordenado; Se x esta´ contidono arranjo original, enta˜o x esta´ em Arms ou em Aresq . . .m ´ 1s
ou em Arm` 1 . . . dirs.
Inicializac¸a˜o: inicialmente o arranjo esta´ vazio, portanto o invari-
ante e´ va´lido.
Entrada: arranjo A; inteiro n; ı´ndices esq, dir; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
enquanto pesq ď dirq fac¸a
m “ esq ` pdir ´ esqq{2;
se pArms ““ xq enta˜o retorne m ;
se pArms ă xq enta˜o esq “ m` 1;
sena˜o dir “ m´ 1 ;
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 33 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Bina´ria
Invariante de Lac¸o: o arranjo esta´ ordenado; Se x esta´ contido
no arranjo original, enta˜o x esta´ em Arms ou em Aresq . . .m ´ 1s
ou em Arm` 1 . . . dirs.
Manutenc¸a˜o: o lac¸o na˜o modifica a posic¸a˜o dos elementos, por-
tanto permanece ordenado; se Arms “ x, o algoritmo retorna o
ı´ndice de x corretamente; caso contra´rio, o algoritmo passa a con-
siderar o Aresq . . .m´ 1s ou Arm` 1 . . . dirs, ate´ encontrar x.
Entrada: arranjo A; inteiro n; ı´ndices esq, dir; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
enquanto pesq ď dirq fac¸a
m “ esq ` pdir ´ esqq{2;
se pArms ““ xq enta˜o retorne m ;
se pArms ă xq enta˜o esq “ m` 1;
sena˜o dir “ m´ 1 ;
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 34 / 47
Busca Sequencial e Busca Bina´ria
Invariante de Lac¸o - Busca Bina´ria
Invariante de Lac¸o: o arranjo esta´ ordenado; Se x esta´ contido
no arranjo original, enta˜o x esta´ em Arms ou em Aresq . . .m ´ 1s
ou em Arm` 1 . . . dirs.
Terminac¸a˜o: na u´ltima iterac¸a˜o do lac¸o esq “ direita “ m e
o arranjo permanece ordenado; se Arms “ x, enta˜o o algoritmo
retorna o ı´ndice de x corretamente; caso contra´rio, o arranjo original
na˜o conte´m x e o algoritmo retorna ´1.
Entrada: arranjo A; inteiro n; ı´ndices esq, dir; inteiro x.
Sa´ıda: ı´ndice do elemento x em A, ou ´1.
enquanto pesq ď dirq fac¸a
m “ esq ` pdir ´ esqq{2;
se pArms ““ xq enta˜o retorne m ;
se pArms ă xq enta˜o esq “ m` 1;
sena˜o dir “ m´ 1 ;
fim
retorne ´1;
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 35 / 47
Busca Sequencial e Busca Bina´ria
Performance (Aproximado)- Busca Bina´ria
Considere n grande
Desconsidere tempo/custo constante
Simplifique!
Entrada: A; n; esq, dir; x.
Sa´ıda: ı´ndice de x em A, ou ´1.
enquanto pesq ď dirq fac¸a
m “ esq ` pdir ´ esqq{2;
se pArms ““ xq enta˜o retorne m ;
se pArms ă xq enta˜o esq “ m` 1;
sena˜o dir “ m´ 1 ;
fim
retorne ´1;
tempo ă n
´
´
´
´
´
´
tempo ă n
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 36 / 47
Insertion Sort
Invariantes de Lac¸o - Insertion Sort
Invariante de Lac¸o: o subarranjo Ar1 . . . j ´ 1s esta´ ordenado.
Inicializac¸a˜o: j = 2 e o subarranjo Ar1 . . . j ´ 1s consiste de um
elemento, trivialmente Ar1 . . . j ´ 1s esta´ ordenado.
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 37 / 47
Insertion Sort
Invariantes de Lac¸o - Insertion Sort
Invariante de Lac¸o: o subarranjo Ar1 . . . j ´ 1s esta´ ordenado.
Manutenc¸a˜o: no corpo do lac¸o for, o algoritmo move uma posic¸a˜o
dentro da sec¸a˜o ordenada (Arj´1s, Arj´2s, ¨ ¨ ¨Ar1s) ate´ encontrar a
posic¸a˜o correta para Arjs, e aumenta o tamanho da sec¸a˜o ordenada
em 1. Portanto, a cada nova iterac¸a˜o, Ar1 . . . j ´ 1s esta´ ordenado.
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 38 / 47
Insertion Sort
Invariantes de Lac¸o - Insertion Sort
Terminac¸a˜o: o algoritmo pa´ra quando j ą comppAq, ou j “ n `
1. Neste momento, o subarranjo Ar1 . . . j ´ 1s conte´m todos os n
elementos do arranjo original ordenados.
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 39 / 47
Insertion Sort
Performance (Aproximado)- Insertion Sort
Considere n grande
Desconsidere tempo/custo constante
Simplifique!
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
n´ 1
´
´
n´ 1
´
´
´
´
´
tempo « n2
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 40 / 47
Insertion Sort
Ana´lise Detalhada - Abstrac¸o˜es e Ordem de Crescimento
1 Utilize a constante ci para representar custos de cada linha i
2 Expresse T pnq como anx ` bn` c, para constantes a, b, c e inteiro
x “ 0 . . . k, de acordo com o custo de cada linha i
3 T pnq e´ definida pelo termo com maior grau no polinoˆmio (ex.: an2)
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 41 / 47
Insertion Sort
Ana´lise Detalhada - Exemplo Busca Sequencial
1 Utilize a constante ci para representar custos de cada linha i
2 Expresse T pnq como anx ` bn` c, para constantes a, b, c e inteiro
x “ 0 . . . k, de acordo com o custo de cada linha i
3 T pnq e´ definida pelo termo com maior grau no polinoˆmio (ex.: an2)
Entrada: A; n; x.
Sa´ıda: ı´ndice de x em A, ou ´1.
para pi “ 0; i ă n; i``q fac¸a
se pAris ““ xq enta˜o
retorne i;
fim
fim
retorne ´1;
custo qtd
c1 n+1
c2 n
c3 n
c4 -
c5 -
c6 1
T pnq “ an` b
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 42 / 47
Insertion Sort
Ana´lise Detalhada - Insertion Sort (Melhor Caso)
1 Aris ď chave para todo j “ 2, 3, . . . , n (ordem crescente)
2 T pnq “ an´ b, para a, b constantes. Uma func¸a˜o linear em n
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
custo qtd
c1 n
c2 n-1
c3 n-1
c4 n-1
c5 -
c6 -
c7 -
c8 n-1
c9 -
T pnq “ an´ b
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 43 / 47
Insertion Sort
Ana´lise Detalhada - Insertion Sort (Pior Caso)
1 Aris ą chave para todo j “ 2, 3, . . . , n (ordem decrescente)
2 T pnq “ an2 ` bn´ c. Uma func¸a˜o quadra´tica em n
para j “ 2 ate´ comp(A) fac¸a
chave = Arjs;
i “ j ´ 1;
enquanto i ą 0 e Aris ą chave fac¸a
Ari` 1s “ Aris;
i “ i´ 1;
fim
Ari` 1s “ chave;
fim
custo qtd
c1 n
c2 n-1
c3 n-1
c4
řn
j“2 tj
c5
řn
j“2ptj´1q
c6
řn
j“2ptj´1q
c7 -
c8 n-1
c9 -
T pnq “ c1n`c2pn´1q`c3pn´1q`c4
nÿ
j“2
tj`c5
nÿ
j“2
ptj´1q`c6
nÿ
j“2
ptj´1q`c8pn´1q
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 44 / 47
Insertion Sort
Ana´lise Detalhada - Insertion Sort (Pior Caso)
1 Aris ą chave para todo j “ 2, 3, . . . , n (ordem decrescente)
2 T pnq “ an2 ` bn´ c. Uma func¸a˜o quadra´tica em n
T pnq “ c1n`c2pn´1q`c3pn´1q`c4
nÿ
j“2
tj`c5
nÿ
j“2
ptj´1q`c6
nÿ
j“2
ptj´1q`c8pn´1q
“ c1n`c2pn´1q`c3pn´1q`c4ˆ npn`1q
2
´ 1˙ `c5ˆ npn´1q
2
˙
`c6ˆ npn´1q
2
˙
`c8pn´1q
“
´c4
2
` c5
2
` c6
2
¯
n2`
´
c1 ` c2 ` c3 ` c4
2
´ c5
2
´ c6
2
` c8
¯
n´pc2`c3`c4`c8q
T pnq “ an2 ` bn´ c
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 45 / 47
Insertion Sort
Atividades
1 Fac¸a a ana´lise detalhada dos algoritmos Soma de Elementos, Busca
Sequencial e Busca Bina´ria considerando o melhor caso e o pior
caso.
2 Considere o Binary Insertion Sort: ordenac¸a˜o por inserc¸a˜o que e´
implementado com lista lincada e utiliza a busca bina´ria para de-
terminar a posic¸a˜o correta para inserir um elemento. Apresente o
invariante de lac¸o e T pnq considerando o melhor caso e o pior caso.
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 46 / 47
Bibliografia
VINU V. DAS: Princ´ıpios de Estruturas de Dados Usando C e C++, MIT Press,
(2006)
THOMAS H. et. al., Algoritmos - Teoria e Pra´tica,(1989)
TENENBAUM, A.M. et al, Estruturas de Dados usando C., Pearson, (2010)
GOODRICH, M. T. e TAMASSIA, R., Estruturas de Dados e Algoritmos em Java.,
Bookman, (2013)
Prof. Dr. Jesmmer Alves APA Julho 23, 2019 47 / 47
	Introdução
	Primeiros Passos
	Análise de um Algoritmo
	Busca Sequencial e Busca Binária
	Insertion Sort