An´alise de Algoritmos
Problemas, instâncias,
algoritmos e tempo
– p. 1/32
Análise de Algoritmos
A Análise de Algoritmos estuda problemas
computacionais recorrentes, ou seja, problemas
que aparecem, sob diversos disfarces, em uma
grande variedade de aplicações e contextos.
– p. 2/32
Análise de Algoritmos
A Análise de Algoritmos estuda problemas
computacionais recorrentes, ou seja, problemas
que aparecem, sob diversos disfarces, em uma
grande variedade de aplicações e contextos.
A análise de um algoritmo para um dado problema
trata de
provar que o algoritmo está correto, e
estimar o tempo de execução do algoritmo.
– p. 2/32
Análise de Algoritmos
Dados dois algoritmos para um mesmo problema,
a análise permite decidir qual dos dois é mais
eficiente.
– p. 3/32
Análise de Algoritmos
Dados dois algoritmos para um mesmo problema,
a análise permite decidir qual dos dois é mais
eficiente.
A estimativa do espaço de memória usado pelo
algoritmo também é importante em muitos casos.
– p. 3/32
Análise de Algoritmos
Pode-se dizer que a Análise de Algoritmos é uma
disciplina de engenharia, pois ela procura prever o
comportamento de um algoritmo antes que ele
seja efetivamente implementado e colocado “em
produção”.
– p. 4/32
Análise de Algoritmos
Num nível mais abstrato, a análise de algoritmos
procura identificar aspectos estruturais comuns
aos algoritmos e estudar paradigmas de projeto de
algoritmos (como divisão e conquista,
programação dinâmica, etc.)
– p. 5/32
Análise de Algoritmos
No restante desta introdução, faremos uma rápida
revisão de conceitos básicos e fixaremos a
notação e a terminologia empregadas no texto.
– p. 6/32
An´alise de Algoritmos
Problemas e suas instâncias
– p. 7/32
Instâncias
Todo problema computacional é uma coleção de
“casos particulares” que chamaremos instˆancias. A
palavra instância é empregada aqui no sentido de
exemplo, exemplar, espécime, amostra, ilustração.
– p. 8/32
Instâncias - Exemplos
Problema da multiplicac¸ ˜ao de n´umeros naturais:
dados números naturais x e y, determinar o
produto x.y.
– p. 9/32
Instâncias - Exemplos
Problema da multiplicac¸ ˜ao de n´umeros naturais:
dados números naturais x e y, determinar o
produto x.y.
Cada instância do problema é definida por
dois números naturais. Por exemplo, os
números 2 e 3 definem uma instância.
– p. 9/32
Instâncias
Problema da ordenac¸ ˜ao: rearranjar (ou seja,
permutar) os elementos de um vetor A[1 . . . n]
de números naturais de modo que ele se torne
crescente.
– p. 10/32
Instâncias
Problema da ordenac¸ ˜ao: rearranjar (ou seja,
permutar) os elementos de um vetor A[1 . . . n]
de números naturais de modo que ele se torne
crescente.
Cada instância do problema é definida por
um número natural n e um vetor A[1 . . . n].
Por exemplo, o número 5 e o vetor
(876, 145, 323, 112, 221) definem uma
instância do problema.
– p. 10/32
Instâncias
Problema do circuito hamiltoniano: encontrar um
circuito hamiltoniano em um grafo.
– p. 11/32
Instâncias
Problema do circuito hamiltoniano: encontrar um
circuito hamiltoniano em um grafo.
Cada instância do problema é definida por
um grafo.
– p. 11/32
Tamanho de uma instância
O tamanho de uma instância de um problema é a
quantidade de dados necessária para descrever a
instância, ou seja, é o “espaço” necessário para
especificar a instância. Em geral, o tamanho de
uma instância é descrito por um único número
natural, mas às vezes é mais conveniente usar um
par, um terno, etc., de números naturais.
– p. 12/32
Tamanho de uma instância
No problema da multiplicação de dois números
naturais, toda instância tem tamanho 2 (pois
consiste em dois números). Dependendo das
circunstâncias, entretanto, pode ser mais
apropriado dizer que o tamanho de uma
instância do problema é o número de
caracteres (ou de dígitos) necessário para
especificar os dois números.
– p. 13/32
Tamanho de uma instância
O tamanho de uma instância do problema de
ordenação é n. (Mas poderia também ser
definido como o número total de caracteres
necessário para escrever os valores dos
elementos de A[1 . . . n].)
– p. 14/32
Tamanho de uma instância
O tamanho de uma instância do problema de
ordenação é n. (Mas poderia também ser
definido como o número total de caracteres
necessário para escrever os valores dos
elementos de A[1 . . . n].)
O tamanho de uma instância do problema do
circuito hamiltoniano em um grafo com n
vértices e m arestas é um par (m, n).
– p. 14/32
Algoritmos para problemas
Dizemos que um algoritmo resolve um problema se,
ao receber qualquer instância do problema,
devolve uma solução da instância ou informa que a
instância não tem solução.
– p. 15/32
Tempo gasto
O tempo gasto (ou complexidade, ou consumo de
tempo) por um algoritmo é o número de operações
consideradas relevantes realizadas pelo algoritmo
e expressa-se esse número como uma função do
tamanho da entrada. Essas operações podem ser
comparações, operações aritméticas, movimento
de dados, etc.
– p. 16/32
Tempo gasto
O tempo gasto (ou complexidade, ou consumo de
tempo) por um algoritmo é o número de operações
consideradas relevantes realizadas pelo algoritmo
e expressa-se esse número como uma função do
tamanho da entrada. Essas operações podem ser
comparações, operações aritméticas, movimento
de dados, etc.
Estamos sempre mais interessados em medir o
tempo gasto pelos algoritmos no pior caso.
– p. 16/32
Consumo de tempo assintótico
Seja A um algoritmo para um problema P. O
tempo de relógio (minutos e segundos) que A
consome para processar uma dada instância de P
depende da máquina usada para executar A. Mas
o efeito da máquina se resume a uma constante
multiplicativa, ou seja, se A consome tempo t
numa determinada máquina, consumirá tempo 2t
numa máquina duas vezes mais lenta e t/2 numa
máquina duas vezes mais rápida.
– p. 17/32
Consumo de tempo assintótico
Para eliminar o efeito da máquina, discutiremos o
consumo de tempo de A a menos de constantes
multiplicativas. A notação assintótica (O, Ω, Θ) é
ideal para fazer isso.
– p. 18/32
An´alise de Algoritmos
Exemplos de algoritmos
– p. 19/32
Apresentação dos algoritmos
Instruc¸ ˜oes
i ← 1;
x ← y;
Se . . . então . . .
Se . . . então . . . senão . . .
Enquanto . . . faça . . .
Para i ← 1 até n faça . . .
– p. 20/32
Apresentação dos algoritmos
Algoritmo: . . .
Entrada: . . .
Saída: . . .
Início
instrução
...
instrução
Fim
– p. 21/32
An´alise de Algoritmos
Algoritmos de busca
– p. 22/32
Busca sequencial
Algoritmo: Busca sequencial
Entrada: Um vetor M1, M2, . . . , Mn e um elemento x
Saída: (“sim”, i) ou “não”
– p. 23/32
Busca sequencial
Algoritmo: Busca sequencial
Entrada: Um vetor M1, M2, . . . , Mn e um elemento x
Saída: (“sim”, i) ou “não”
Início
i ← 1;
Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1;
– p. 23/32
Busca sequencial
Algoritmo: Busca sequencial
Entrada: Um vetor M1, M2, . . . , Mn e um elemento x
Saída: (“sim”, i) ou “não”
Início
i ← 1;
Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1;
Se (i ≤ n) então imprima (“sim”, i) senão imprima “não”
Fim
– p. 23/32
Busca sequencial
Algoritmo: Busca sequencial
Entrada: Um vetor M1, M2, . . . , Mn e um elemento x
Saída: (“sim”, i) ou “não”
Início
i ← 1;
Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1;
Se (i ≤ n) então imprima (“sim”, i) senão imprima “não”
Fim
Qual o tempo (pior caso) gasto pelo algoritmo?
– p. 23/32
Busca sequencial
Algoritmo: Busca sequencial
Entrada: Um vetor M1, M2, . . . , Mn e um elemento x
Saída: (“sim”, i) ou “não”
Início
i ← 1;
Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1;
Se (i ≤ n) então imprima (“sim”, i) senão imprima “não”
Fim
Qual o tempo (pior caso) gasto pelo algoritmo?
Resposta: O(n)
– p. 23/32
Busca binária
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
k ← (l + r)/2 ;
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
k ← (l + r)/2 ;
Se x = Mk então achou ← verdadeiro
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
k ← (l + r)/2 ;
Se x = Mk então achou ← verdadeiro
senão se x > Mk então l ← k + 1 senão r ← k − 1
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
k ← (l + r)/2 ;
Se x = Mk então achou ← verdadeiro
senão se x > Mk então l ← k + 1 senão r ← k − 1
Se achou então imprima (“sim”, k) senão imprima “não”
Fim
– p. 24/32
Busca binária
Entrada: Um vetor M1, M2, . . . , Mn de inteiros ordenado e
um inteiro x
Saída: (“sim”, i) ou “não”
Início
l ← 1; r ← n; achou ← falso;
Enquanto (l ≤ r) e (não achou) faça
k ← (l + r)/2 ;
Se x = Mk então achou ← verdadeiro
senão se x > Mk então l ← k + 1 senão r ← k − 1
Se achou então imprima (“sim”, k) senão imprima “não”
Fim
Qual o tempo (pior caso) gasto pelo algoritmo?
– p. 24/32
Busca binária - tempo
O tempo gasto pela busca binária é proporcional
ao número de iterações do laço “Enquanto ... faça”.
– p. 25/32
Busca binária - tempo
O tempo gasto pela busca binária é proporcional
ao número de iterações do laço “Enquanto ... faça”.
O número de elementos do vetor no início da
1a. iteração é n
– p. 25/32
Busca binária - tempo
O tempo gasto pela busca binária é proporcional
ao número de iterações do laço “Enquanto ... faça”.
O número de elementos do vetor no início da
1a. iteração é n
2a. iteração é n/2
– p. 25/32
Busca binária - tempo
O tempo gasto pela busca binária é proporcional
ao número de iterações do laço “Enquanto ... faça”.
O número de elementos do vetor no início da
1a. iteração é n
2a. iteração é n/2
3a. iteração é n/22
– p. 25/32
Busca binária - tempo
O tempo gasto pela busca binária é proporcional
ao número de iterações do laço “Enquanto ... faça”.
O número de elementos do vetor no início da
1a. iteração é n
2a. iteração é n/2
3a. iteração é n/22
...
(i + 1)a. iteração é n/2i
– p. 25/32
Busca binária - tempo
Na última iteração teremos n/2i
= 1, o que resulta
em
i = log n
– p. 26/32
Busca binária - tempo
Na última iteração teremos n/2i
= 1, o que resulta
em
i = log n
Portanto, o tempo gasto pela busca binária é
O(log n).
– p. 26/32
An´alise de Algoritmos
Algoritmos de ordenação
– p. 27/32
Ordenação
Algoritmos básicos:
Trocas sucessivas (bubblesort)
Seleção
Inserção
– p. 28/32
Ordenação - bubblesort
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
– p. 29/32
Ordenação - bubblesort
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Início
Para j ← i até n − 1 faça
Para 1 ← i até j faça
Se Mi > Mi+1 então “troque Mi com Mi+1”
Fim
– p. 29/32
Ordenação - bubblesort
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Início
Para j ← i até n − 1 faça
Para 1 ← i até j faça
Se Mi > Mi+1 então “troque Mi com Mi+1”
Fim
Qual o tempo (pior caso) gasto pelo algoritmo?
– p. 29/32
Ordenação - bubblesort
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Início
Para j ← i até n − 1 faça
Para 1 ← i até j faça
Se Mi > Mi+1 então “troque Mi com Mi+1”
Fim
Qual o tempo (pior caso) gasto pelo algoritmo?
Resposta: O(n2)
– p. 29/32
Ordenação por seleção
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
– p. 30/32
Ordenação por seleção
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Idéia:
Selecione o maior elemento
Troque-o com o “último” da lista
– p. 30/32
Ordenação por seleção
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Idéia:
Selecione o maior elemento
Troque-o com o “último” da lista
Exercício: Escreva o algoritmo
– p. 30/32
Ordenação por seleção
Entrada: Um vetor M = M1, M2, . . . , Mn de inteiros
Saída: O vetor M ordenado em ordem não decrescente
Idéia:
Selecione o maior elemento
Troque-o com o “último” da lista
Exercício: Escreva o algoritmo
Qual o tempo (pior caso) gasto pelo algoritmo?
– p. 30/32
Exercícios
1. Escreva um algoritmo para ordenar os elementos de
um vetor utilizando a seguinte idéia:
selecione o menor elemento
troque-o com o “primeiro” da lista
2. Escreva um algoritmo para ordenar os elementos de
um vetor M1, M2, . . . , Mn utilizando a seguinte idéia
(ordenação das cartas de baralho - inserção):
suponha que M1, M2, . . . , Mi já está ordenado
insira Mi+1 na posição correta para obter
M1, M2, . . . , Mi+1 ordenado
– p. 31/32
Exercícios
3. Escreva um algoritmo para verificar se os elementos de
um vetor M1, M2, . . . , Mn estão em ordem não
decrescente.
4. Um algoritmo de ordenação é estável se não altera a
posição relativa dos elementos de mesmo valor.
(a) Bubblesort é estável?
(b) Seleção é estável?
– p. 32/32

Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo

  • 1.
    An´alise de Algoritmos Problemas,instâncias, algoritmos e tempo – p. 1/32
  • 2.
    Análise de Algoritmos AAnálise de Algoritmos estuda problemas computacionais recorrentes, ou seja, problemas que aparecem, sob diversos disfarces, em uma grande variedade de aplicações e contextos. – p. 2/32
  • 3.
    Análise de Algoritmos AAnálise de Algoritmos estuda problemas computacionais recorrentes, ou seja, problemas que aparecem, sob diversos disfarces, em uma grande variedade de aplicações e contextos. A análise de um algoritmo para um dado problema trata de provar que o algoritmo está correto, e estimar o tempo de execução do algoritmo. – p. 2/32
  • 4.
    Análise de Algoritmos Dadosdois algoritmos para um mesmo problema, a análise permite decidir qual dos dois é mais eficiente. – p. 3/32
  • 5.
    Análise de Algoritmos Dadosdois algoritmos para um mesmo problema, a análise permite decidir qual dos dois é mais eficiente. A estimativa do espaço de memória usado pelo algoritmo também é importante em muitos casos. – p. 3/32
  • 6.
    Análise de Algoritmos Pode-sedizer que a Análise de Algoritmos é uma disciplina de engenharia, pois ela procura prever o comportamento de um algoritmo antes que ele seja efetivamente implementado e colocado “em produção”. – p. 4/32
  • 7.
    Análise de Algoritmos Numnível mais abstrato, a análise de algoritmos procura identificar aspectos estruturais comuns aos algoritmos e estudar paradigmas de projeto de algoritmos (como divisão e conquista, programação dinâmica, etc.) – p. 5/32
  • 8.
    Análise de Algoritmos Norestante desta introdução, faremos uma rápida revisão de conceitos básicos e fixaremos a notação e a terminologia empregadas no texto. – p. 6/32
  • 9.
    An´alise de Algoritmos Problemase suas instâncias – p. 7/32
  • 10.
    Instâncias Todo problema computacionalé uma coleção de “casos particulares” que chamaremos instˆancias. A palavra instância é empregada aqui no sentido de exemplo, exemplar, espécime, amostra, ilustração. – p. 8/32
  • 11.
    Instâncias - Exemplos Problemada multiplicac¸ ˜ao de n´umeros naturais: dados números naturais x e y, determinar o produto x.y. – p. 9/32
  • 12.
    Instâncias - Exemplos Problemada multiplicac¸ ˜ao de n´umeros naturais: dados números naturais x e y, determinar o produto x.y. Cada instância do problema é definida por dois números naturais. Por exemplo, os números 2 e 3 definem uma instância. – p. 9/32
  • 13.
    Instâncias Problema da ordenac¸˜ao: rearranjar (ou seja, permutar) os elementos de um vetor A[1 . . . n] de números naturais de modo que ele se torne crescente. – p. 10/32
  • 14.
    Instâncias Problema da ordenac¸˜ao: rearranjar (ou seja, permutar) os elementos de um vetor A[1 . . . n] de números naturais de modo que ele se torne crescente. Cada instância do problema é definida por um número natural n e um vetor A[1 . . . n]. Por exemplo, o número 5 e o vetor (876, 145, 323, 112, 221) definem uma instância do problema. – p. 10/32
  • 15.
    Instâncias Problema do circuitohamiltoniano: encontrar um circuito hamiltoniano em um grafo. – p. 11/32
  • 16.
    Instâncias Problema do circuitohamiltoniano: encontrar um circuito hamiltoniano em um grafo. Cada instância do problema é definida por um grafo. – p. 11/32
  • 17.
    Tamanho de umainstância O tamanho de uma instância de um problema é a quantidade de dados necessária para descrever a instância, ou seja, é o “espaço” necessário para especificar a instância. Em geral, o tamanho de uma instância é descrito por um único número natural, mas às vezes é mais conveniente usar um par, um terno, etc., de números naturais. – p. 12/32
  • 18.
    Tamanho de umainstância No problema da multiplicação de dois números naturais, toda instância tem tamanho 2 (pois consiste em dois números). Dependendo das circunstâncias, entretanto, pode ser mais apropriado dizer que o tamanho de uma instância do problema é o número de caracteres (ou de dígitos) necessário para especificar os dois números. – p. 13/32
  • 19.
    Tamanho de umainstância O tamanho de uma instância do problema de ordenação é n. (Mas poderia também ser definido como o número total de caracteres necessário para escrever os valores dos elementos de A[1 . . . n].) – p. 14/32
  • 20.
    Tamanho de umainstância O tamanho de uma instância do problema de ordenação é n. (Mas poderia também ser definido como o número total de caracteres necessário para escrever os valores dos elementos de A[1 . . . n].) O tamanho de uma instância do problema do circuito hamiltoniano em um grafo com n vértices e m arestas é um par (m, n). – p. 14/32
  • 21.
    Algoritmos para problemas Dizemosque um algoritmo resolve um problema se, ao receber qualquer instância do problema, devolve uma solução da instância ou informa que a instância não tem solução. – p. 15/32
  • 22.
    Tempo gasto O tempogasto (ou complexidade, ou consumo de tempo) por um algoritmo é o número de operações consideradas relevantes realizadas pelo algoritmo e expressa-se esse número como uma função do tamanho da entrada. Essas operações podem ser comparações, operações aritméticas, movimento de dados, etc. – p. 16/32
  • 23.
    Tempo gasto O tempogasto (ou complexidade, ou consumo de tempo) por um algoritmo é o número de operações consideradas relevantes realizadas pelo algoritmo e expressa-se esse número como uma função do tamanho da entrada. Essas operações podem ser comparações, operações aritméticas, movimento de dados, etc. Estamos sempre mais interessados em medir o tempo gasto pelos algoritmos no pior caso. – p. 16/32
  • 24.
    Consumo de tempoassintótico Seja A um algoritmo para um problema P. O tempo de relógio (minutos e segundos) que A consome para processar uma dada instância de P depende da máquina usada para executar A. Mas o efeito da máquina se resume a uma constante multiplicativa, ou seja, se A consome tempo t numa determinada máquina, consumirá tempo 2t numa máquina duas vezes mais lenta e t/2 numa máquina duas vezes mais rápida. – p. 17/32
  • 25.
    Consumo de tempoassintótico Para eliminar o efeito da máquina, discutiremos o consumo de tempo de A a menos de constantes multiplicativas. A notação assintótica (O, Ω, Θ) é ideal para fazer isso. – p. 18/32
  • 26.
    An´alise de Algoritmos Exemplosde algoritmos – p. 19/32
  • 27.
    Apresentação dos algoritmos Instruc¸˜oes i ← 1; x ← y; Se . . . então . . . Se . . . então . . . senão . . . Enquanto . . . faça . . . Para i ← 1 até n faça . . . – p. 20/32
  • 28.
    Apresentação dos algoritmos Algoritmo:. . . Entrada: . . . Saída: . . . Início instrução ... instrução Fim – p. 21/32
  • 29.
  • 30.
    Busca sequencial Algoritmo: Buscasequencial Entrada: Um vetor M1, M2, . . . , Mn e um elemento x Saída: (“sim”, i) ou “não” – p. 23/32
  • 31.
    Busca sequencial Algoritmo: Buscasequencial Entrada: Um vetor M1, M2, . . . , Mn e um elemento x Saída: (“sim”, i) ou “não” Início i ← 1; Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1; – p. 23/32
  • 32.
    Busca sequencial Algoritmo: Buscasequencial Entrada: Um vetor M1, M2, . . . , Mn e um elemento x Saída: (“sim”, i) ou “não” Início i ← 1; Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1; Se (i ≤ n) então imprima (“sim”, i) senão imprima “não” Fim – p. 23/32
  • 33.
    Busca sequencial Algoritmo: Buscasequencial Entrada: Um vetor M1, M2, . . . , Mn e um elemento x Saída: (“sim”, i) ou “não” Início i ← 1; Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1; Se (i ≤ n) então imprima (“sim”, i) senão imprima “não” Fim Qual o tempo (pior caso) gasto pelo algoritmo? – p. 23/32
  • 34.
    Busca sequencial Algoritmo: Buscasequencial Entrada: Um vetor M1, M2, . . . , Mn e um elemento x Saída: (“sim”, i) ou “não” Início i ← 1; Enquanto (i ≤ n) e (x = Mi) faça i ← i + 1; Se (i ≤ n) então imprima (“sim”, i) senão imprima “não” Fim Qual o tempo (pior caso) gasto pelo algoritmo? Resposta: O(n) – p. 23/32
  • 35.
  • 36.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” – p. 24/32
  • 37.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; – p. 24/32
  • 38.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça – p. 24/32
  • 39.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça k ← (l + r)/2 ; – p. 24/32
  • 40.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça k ← (l + r)/2 ; Se x = Mk então achou ← verdadeiro – p. 24/32
  • 41.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça k ← (l + r)/2 ; Se x = Mk então achou ← verdadeiro senão se x > Mk então l ← k + 1 senão r ← k − 1 – p. 24/32
  • 42.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça k ← (l + r)/2 ; Se x = Mk então achou ← verdadeiro senão se x > Mk então l ← k + 1 senão r ← k − 1 Se achou então imprima (“sim”, k) senão imprima “não” Fim – p. 24/32
  • 43.
    Busca binária Entrada: Umvetor M1, M2, . . . , Mn de inteiros ordenado e um inteiro x Saída: (“sim”, i) ou “não” Início l ← 1; r ← n; achou ← falso; Enquanto (l ≤ r) e (não achou) faça k ← (l + r)/2 ; Se x = Mk então achou ← verdadeiro senão se x > Mk então l ← k + 1 senão r ← k − 1 Se achou então imprima (“sim”, k) senão imprima “não” Fim Qual o tempo (pior caso) gasto pelo algoritmo? – p. 24/32
  • 44.
    Busca binária -tempo O tempo gasto pela busca binária é proporcional ao número de iterações do laço “Enquanto ... faça”. – p. 25/32
  • 45.
    Busca binária -tempo O tempo gasto pela busca binária é proporcional ao número de iterações do laço “Enquanto ... faça”. O número de elementos do vetor no início da 1a. iteração é n – p. 25/32
  • 46.
    Busca binária -tempo O tempo gasto pela busca binária é proporcional ao número de iterações do laço “Enquanto ... faça”. O número de elementos do vetor no início da 1a. iteração é n 2a. iteração é n/2 – p. 25/32
  • 47.
    Busca binária -tempo O tempo gasto pela busca binária é proporcional ao número de iterações do laço “Enquanto ... faça”. O número de elementos do vetor no início da 1a. iteração é n 2a. iteração é n/2 3a. iteração é n/22 – p. 25/32
  • 48.
    Busca binária -tempo O tempo gasto pela busca binária é proporcional ao número de iterações do laço “Enquanto ... faça”. O número de elementos do vetor no início da 1a. iteração é n 2a. iteração é n/2 3a. iteração é n/22 ... (i + 1)a. iteração é n/2i – p. 25/32
  • 49.
    Busca binária -tempo Na última iteração teremos n/2i = 1, o que resulta em i = log n – p. 26/32
  • 50.
    Busca binária -tempo Na última iteração teremos n/2i = 1, o que resulta em i = log n Portanto, o tempo gasto pela busca binária é O(log n). – p. 26/32
  • 51.
    An´alise de Algoritmos Algoritmosde ordenação – p. 27/32
  • 52.
    Ordenação Algoritmos básicos: Trocas sucessivas(bubblesort) Seleção Inserção – p. 28/32
  • 53.
    Ordenação - bubblesort Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente – p. 29/32
  • 54.
    Ordenação - bubblesort Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Início Para j ← i até n − 1 faça Para 1 ← i até j faça Se Mi > Mi+1 então “troque Mi com Mi+1” Fim – p. 29/32
  • 55.
    Ordenação - bubblesort Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Início Para j ← i até n − 1 faça Para 1 ← i até j faça Se Mi > Mi+1 então “troque Mi com Mi+1” Fim Qual o tempo (pior caso) gasto pelo algoritmo? – p. 29/32
  • 56.
    Ordenação - bubblesort Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Início Para j ← i até n − 1 faça Para 1 ← i até j faça Se Mi > Mi+1 então “troque Mi com Mi+1” Fim Qual o tempo (pior caso) gasto pelo algoritmo? Resposta: O(n2) – p. 29/32
  • 57.
    Ordenação por seleção Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente – p. 30/32
  • 58.
    Ordenação por seleção Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Idéia: Selecione o maior elemento Troque-o com o “último” da lista – p. 30/32
  • 59.
    Ordenação por seleção Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Idéia: Selecione o maior elemento Troque-o com o “último” da lista Exercício: Escreva o algoritmo – p. 30/32
  • 60.
    Ordenação por seleção Entrada:Um vetor M = M1, M2, . . . , Mn de inteiros Saída: O vetor M ordenado em ordem não decrescente Idéia: Selecione o maior elemento Troque-o com o “último” da lista Exercício: Escreva o algoritmo Qual o tempo (pior caso) gasto pelo algoritmo? – p. 30/32
  • 61.
    Exercícios 1. Escreva umalgoritmo para ordenar os elementos de um vetor utilizando a seguinte idéia: selecione o menor elemento troque-o com o “primeiro” da lista 2. Escreva um algoritmo para ordenar os elementos de um vetor M1, M2, . . . , Mn utilizando a seguinte idéia (ordenação das cartas de baralho - inserção): suponha que M1, M2, . . . , Mi já está ordenado insira Mi+1 na posição correta para obter M1, M2, . . . , Mi+1 ordenado – p. 31/32
  • 62.
    Exercícios 3. Escreva umalgoritmo para verificar se os elementos de um vetor M1, M2, . . . , Mn estão em ordem não decrescente. 4. Um algoritmo de ordenação é estável se não altera a posição relativa dos elementos de mesmo valor. (a) Bubblesort é estável? (b) Seleção é estável? – p. 32/32