Como Descrever e Avaliar Algoritmos de
Computador
Talles Brito Viana
*Apresentac¸˜ao baseada na discuss˜ao apresentada em “Algorithms:Unlocked” de Thomas H. Cormen
Como descrever algoritmos?
Linguagens e abstrac¸ ˜oes
Qual o problema em usar linguagens de programac¸˜ao reais (Java, C, C++, Python, Pascal) para especificar algoritmos?
Se prender em detalhes e n˜ao perceber as ideias que fundamentam o algoritmo!
Optamos neste curso por utilizar uma linguagem de:
Em alguns momentos de “pseudoc´odigo”: parece uma mistura de v´arias linguagens.
Em outros momentos: baseada em linguagem natural e analogias com cen´arios do mundo real.
Como descrever algoritmos?
Linguagens e abstrac¸ ˜oes
Qual o problema em usar linguagens de programac¸˜ao reais (Java, C, C++, Python, Pascal) para especificar algoritmos?
Se prender em detalhes e n˜ao perceber as ideias que fundamentam o algoritmo!
Optamos neste curso por utilizar uma linguagem de:
Em alguns momentos de “pseudoc´odigo”: parece uma mistura de v´arias linguagens.
Em outros momentos: baseada em linguagem natural e analogias com cen´arios do mundo real.
Como descrever algoritmos?
Linguagens e abstrac¸ ˜oes
Qual o problema em usar linguagens de programac¸˜ao reais (Java, C, C++, Python, Pascal) para especificar algoritmos?
Se prender em detalhes e n˜ao perceber as ideias que fundamentam o algoritmo!
Optamos neste curso por utilizar uma linguagem de:
Em alguns momentos de “pseudoc´odigo”: parece uma mistura de v´arias linguagens.
Em outros momentos: baseada em linguagem natural e analogias com cen´arios do mundo real.
Pseudoc ´odigos e linguagem abstrata
O que s ˜ao?
N˜ao devemos descrever algoritmos para software ou hardware mas para “massacinzentaware”: aquilo que est´a entre suas orelhas!
Apesar disso, acredito que vocˆe ´e totalmente capaz de traduzir as descric¸˜oes em linguagem espec´ıfica e c´odigo compil´avel.
Descric¸ ˜oes de algoritmos
Conceitos recorrentes
Procedimentos (ou func¸˜oes): especificam algo a fazer.
Chamada de procedimento: para que o procedimento fac¸a algo devemos o chamar especificando uma entrada.
Retorno: se o procedimento produz algum resultado este deve ser retornado.
Exemplo
Elevar x a y
Algoritmo: Elevar (x, y)
Dados: Um valor x e um valor y ≥ 0 Resultado: O valor de xy
1 resposta←− 1;
2 para i ←− 1 at ´e y fac¸a
3 resposta←− resposta × x;
Exemplo
Elevar x a y
Algoritmo: Elevar (x, y)
Dados: Um valor x e um valor y ≥ 0 Resultado: O valor de xy
1 resposta←− 1;
2 para i ←− 1 at ´e y fac¸a
3 resposta←− resposta × x;
Arranjos
O que s ˜ao?
Um arranjo agrega dados do mesmo tipo em uma entidade. Cada elemento tem um ´ındice de uma entrada.
Em “massacinzentaware“ usualmente comec¸amos em 1. Um Arranjo de Livros ´Indice Livro 1 O C´odigo da Vinci 2 A Sombra do Vento 3 O Nome da Rosa 4 O Labirinto Perdido 5 O Iluminado
Nosso primeiro problema
e primeiro algoritmo que o resolva...
Como buscar um valor particular dentro de um Arranjo?
Analogia: imagine uma longa prateleira cheia de livros e gostar´ıamos de saber onde est´a um determinado livro. Restric¸˜oes:
Talvez os livros n˜ao estejam organizados de nenhum modo particular.
Itens podem estar repetidos mas gostar´ıamos de encontrar qualquer posic¸˜ao em que o livro procurado esteja. Tamb´em gostar´ıamos de saber caso o livro n˜ao esteja na prateleira.
Nosso primeiro problema
e primeiro algoritmo que o resolva...
Como buscar um valor particular dentro de um Arranjo? Analogia: imagine uma longa prateleira cheia de livros e gostar´ıamos de saber onde est´a um determinado livro.
Restric¸˜oes:
Talvez os livros n˜ao estejam organizados de nenhum modo particular.
Itens podem estar repetidos mas gostar´ıamos de encontrar qualquer posic¸˜ao em que o livro procurado esteja. Tamb´em gostar´ıamos de saber caso o livro n˜ao esteja na prateleira.
Nosso primeiro problema
e primeiro algoritmo que o resolva...
Como buscar um valor particular dentro de um Arranjo? Analogia: imagine uma longa prateleira cheia de livros e gostar´ıamos de saber onde est´a um determinado livro. Restric¸˜oes:
Talvez os livros n˜ao estejam organizados de nenhum modo particular.
Itens podem estar repetidos mas gostar´ıamos de encontrar qualquer posic¸˜ao em que o livro procurado esteja. Tamb´em gostar´ıamos de saber caso o livro n˜ao esteja na prateleira.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Um lac¸o da forma ”Para i = 1 at´e n” executa n iterac¸˜oes e n + 1 testes. Al´em disso, i ´e incrementada n vezes.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Um lac¸o da forma ”Para i = 1 at´e n” executa n iterac¸˜oes e n + 1 testes. Al´em disso, i ´e incrementada n vezes.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Um lac¸o da forma ”Para i = 1 at´e n” executa n iterac¸˜oes e n + 1 testes. Al´em disso, i ´e incrementada n vezes.
Como caracterizar tempos de execuc¸ ˜ao?
e analisar algoritmos...
Precisamos caraterizar o tempo de execuc¸˜ao baseado no tamanho da entrada.
Presumimos que cada operac¸˜ao individual (aritm´etica, comparac¸˜ao, acesso `a vari´avel, chamada de procedimento) demora uma quantidade de tempo que ´e fixa e independente do tamanho da entrada.
Vamos dizer que a execuc¸˜ao da etapa i do algoritmo leva tempo ti, em que ti ´e uma constante que independente do tamanho da
Como caracterizar tempos de execuc¸ ˜ao?
e analisar algoritmos...
Precisamos caraterizar o tempo de execuc¸˜ao baseado no tamanho da entrada.
Presumimos que cada operac¸˜ao individual (aritm´etica, comparac¸˜ao, acesso `a vari´avel, chamada de procedimento) demora uma quantidade de tempo que ´e fixa e independente do tamanho da entrada.
Vamos dizer que a execuc¸˜ao da etapa i do algoritmo leva tempo ti, em que ti ´e uma constante que independente do tamanho da
Como caracterizar tempos de execuc¸ ˜ao?
e analisar algoritmos...
Precisamos caraterizar o tempo de execuc¸˜ao baseado no tamanho da entrada.
Presumimos que cada operac¸˜ao individual (aritm´etica, comparac¸˜ao, acesso `a vari´avel, chamada de procedimento) demora uma quantidade de tempo que ´e fixa e independente do tamanho da entrada.
Vamos dizer que a execuc¸˜ao da etapa i do algoritmo leva tempo ti, em que ti ´e uma constante que independente do tamanho da
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND 2 Para cada ´ındice i, indo de 1 a n, em ordem:
a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i,indo de 1a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i,indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao ajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Algoritmo: BUSCA-LINEAR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Ajustamos resposta para NOT-FOUND
2 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜aoajuste resposta para o valor de i.
3 Retorne o valor de resposta como sa´ıda.
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior
t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t002a· n + t3
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior
t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t002a· n + t3
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3= t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t3 = t1+ t2+ t02· n + t20 + t002 · n + t02a· n + t3= t02· n + t200· n + t02a· n + t1+ t2+ t20 + t3= (t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3= t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t3 = t1+ t2+ t02· n + t20 + t002 · n + t02a· n + t3= t02· n + t200· n + t02a· n + t1+ t2+ t20 + t3= (t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3= t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t3 = t1+ t2+ t02· n + t20 + t002 · n + t02a· n + t3= t02· n + t200· n + t02a· n + t1+ t2+ t20 + t3= (t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3= t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t3 = t1+ t2+ t02· n + t20 + t002 · n + t02a· n + t3= t02· n + t200· n + t02a· n + t1+ t2+ t20 + t3= (t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· 0 + t3= t1+ t2+ t02· (n + 1) + t 00 2· n + t 0 2a· n + t3 = t1+ t2+ t02· n + t20 + t002 · n + t02a· n + t3= t02· n + t200· n + t02a· n + t1+ t2+ t20 + t3= (t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· n + t3= t1+ t2+ t02· n + t 0 2+ t 00 2 · n + t 0 2a· n + t002a· n + t3 = t02· n + t00 2 · n + t02a· n + t002a· n + t1+ t2+ t02+ t3 = (t20 + t002+ t02a+ t002a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· n + t3= t1+ t2+ t02· n + t 0 2+ t 00 2 · n + t 0 2a· n + t002a· n + t3= t02· n + t00 2 · n + t02a· n + t002a· n + t1+ t2+ t02+ t3 = (t20 + t002+ t02a+ t002a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· n + t3= t1+ t2+ t02· n + t 0 2+ t 00 2 · n + t 0 2a· n + t002a· n + t3= t02· n + t00 2 · n + t02a· n + t002a· n + t1+ t2+ t02+ t3= (t20 + t002+ t02a+ t002a) · n + (t1+ t2+ t02+ t3)
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior t1+ t2+ t02· (n + 1) + t200· n + t02a· n + t002a· n + t3= t1+ t2+ t02· n + t 0 2+ t 00 2 · n + t 0 2a· n + t002a· n + t3= t02· n + t00 2 · n + t02a· n + t002a· n + t1+ t2+ t02+ t3= (t20 + t002+ t02a+ t002a) · n + (t1+ t2+ t02+ t3)
Busca linear
Tempo de execuc¸ ˜ao: conclus ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior
(t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior
Busca linear
Tempo de execuc¸ ˜ao: conclus ˜ao
O tempo de execuc¸˜ao est´a em algum lugar entre o limite inferior (se x n˜ao estiver no arranjo):
Limite inferior
(t20 + t002+ t02a) · n + (t1+ t2+ t02+ t3)
e o limite superior (se todo valor de A[i] for igual a x):
Limite superior
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
Observe que ambos os limites s˜ao da forma an + b onde a e b s˜ao constantes.
O tempo de execuc¸˜ao de BUSCA-LINEAR ´e limitado por baixo e por cima por uma func¸˜ao linear.
Quando o tempo de execuc¸˜ao ´e limitado por baixo e por cima por uma func¸˜ao linear dizemos que o tempo de execuc¸˜ao ´e θ(n), isto ´e, “teta de n”.
Perdemos a precis˜ao ao descartar coeficientes constantes mas destacamos a ordem de crescimento do tempo de execuc¸˜ao.
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
Observe que ambos os limites s˜ao da forma an + b onde a e b s˜ao constantes.
O tempo de execuc¸˜ao de BUSCA-LINEAR ´e limitado por baixo e por cima por uma func¸˜ao linear.
Quando o tempo de execuc¸˜ao ´e limitado por baixo e por cima por uma func¸˜ao linear dizemos que o tempo de execuc¸˜ao ´e θ(n), isto ´e, “teta de n”.
Perdemos a precis˜ao ao descartar coeficientes constantes mas destacamos a ordem de crescimento do tempo de execuc¸˜ao.
Busca linear
Caracterizac¸ ˜ao de tempo de execuc¸ ˜ao
Observe que ambos os limites s˜ao da forma an + b onde a e b s˜ao constantes.
O tempo de execuc¸˜ao de BUSCA-LINEAR ´e limitado por baixo e por cima por uma func¸˜ao linear.
Quando o tempo de execuc¸˜ao ´e limitado por baixo e por cima por uma func¸˜ao linear dizemos que o tempo de execuc¸˜ao ´e θ(n), isto ´e, “teta de n”.
Perdemos a precis˜ao ao descartar coeficientes constantes mas destacamos a ordem de crescimento do tempo de execuc¸˜ao.
Notac¸ ˜ao θ
Definic¸ ˜ao
Notac¸ ˜ao θ
Para uma dada func¸˜ao g(n), denotamos por θ(g(n)) = {f (n) : existem constantes positivas c1, c2
e n0tais que
0 ≤ c1g(n) ≤ f (n) ≤ c2g(n) para
Otimizando a busca linear
Como melhorar o tempo de execuc¸ ˜ao?
Normalmente vocˆe continuaria a procurar um livro assim que o encontrasse na prateleira?
Podemos ajustar a busca linear de maneira que ela pare assim que encontrar o valor procurado.
Otimizando a busca linear
Como melhorar o tempo de execuc¸ ˜ao?
Normalmente vocˆe continuaria a procurar um livro assim que o encontrasse na prateleira?
Podemos ajustar a busca linear de maneira que ela pare assim que encontrar o valor procurado.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i,indo de 1a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
2 Retorne NOT-FOUND como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i,indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
2 Retorne NOT-FOUND como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
2 Retorne NOT-FOUND como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
2 Retorne NOT-FOUND como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜aoretorne o valor de icomo sa´ıda.
2 Retorne NOT-FOUND como sa´ıda.
Busca linear melhorada
Algoritmo: BUSCA-LINEAR-MELHOR (A, n, x) Dados:
A: um arranjo.
n: o n´umero de elementos em A no qual procurar. x: o valor que buscamos.
Resultado: Um ´ındice i para o qual A[i] = x ou o valor especial
NOT-FOUND, que pode ser qualquer ´ındice
inv´alido no arranjo, por exemplo, 0 ou qualquer inteiro negativo.
1 Para cada ´ındice i, indo de 1 a n, em ordem: a Se A[i] = x, ent˜ao retorne o valor de i como sa´ıda.
2 Retorne NOT-FOUNDcomo sa´ıda.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Qual a situac¸˜ao de melhor caso para BUSCA-LINEAR-MELHOR?
O elemento x est´a na primeira posic¸˜ao, o algoritmo iterar´a apenas uma vez.
Qual a situac¸˜ao de pior caso para BUSCA-LINEAR-MELHOR? Se o elemento x n˜ao estiver no arranjo, o algoritmo iterar´a todas as n vezes.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Qual a situac¸˜ao de melhor caso para BUSCA-LINEAR-MELHOR?
O elemento x est´a na primeira posic¸˜ao, o algoritmo iterar´a apenas uma vez.
Qual a situac¸˜ao de pior caso para BUSCA-LINEAR-MELHOR? Se o elemento x n˜ao estiver no arranjo, o algoritmo iterar´a todas as n vezes.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Qual a situac¸˜ao de melhor caso para BUSCA-LINEAR-MELHOR?
O elemento x est´a na primeira posic¸˜ao, o algoritmo iterar´a apenas uma vez.
Qual a situac¸˜ao de pior caso para BUSCA-LINEAR-MELHOR?
Se o elemento x n˜ao estiver no arranjo, o algoritmo iterar´a todas as n vezes.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Qual a situac¸˜ao de melhor caso para BUSCA-LINEAR-MELHOR?
O elemento x est´a na primeira posic¸˜ao, o algoritmo iterar´a apenas uma vez.
Qual a situac¸˜ao de pior caso para BUSCA-LINEAR-MELHOR? Se o elemento x n˜ao estiver no arranjo, o algoritmo iterar´a todas as n vezes.
Otimizando a busca linear
Custo da vers ˜ao melhorada
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
e o limite superior (se x n˜ao estiver presente):
Limite superior
t1+ t10 · (n + 1) + t001· n + t01a· n + t2=
t1+ t10 · n + t01+ t001· n + t01a· n + t2 =
t01· n + t100· n + t01a· n + t1+ t01+ t2 =
Otimizando a busca linear
Custo da vers ˜ao melhorada
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
e o limite superior (se x n˜ao estiver presente):
Limite superior
t1+ t10 · (n + 1) + t001· n + t01a· n + t2=
t1+ t10 · n + t01+ t001· n + t01a· n + t2 =
t01· n + t100· n + t01a· n + t1+ t01+ t2 =
Otimizando a busca linear
Custo da vers ˜ao melhorada
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
e o limite superior (se x n˜ao estiver presente):
Limite superior
t1+ t10 · (n + 1) + t001· n + t01a· n + t2=
t1+ t10 · n + t01+ t001· n + t01a· n + t2 =
t01· n + t100· n + t01a· n + t1+ t01+ t2 =
Otimizando a busca linear
Custo da vers ˜ao melhorada
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
e o limite superior (se x n˜ao estiver presente):
Limite superior
t1+ t10 · (n + 1) + t001· n + t01a· n + t2=
t1+ t10 · n + t01+ t001· n + t01a· n + t2 =
t01· n + t100· n + t01a· n + t1+ t01+ t2 =
Otimizando a busca linear
Custo da vers ˜ao melhorada
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
e o limite superior (se x n˜ao estiver presente):
Limite superior
t1+ t10 · (n + 1) + t001· n + t01a· n + t2=
t1+ t10 · n + t01+ t001· n + t01a· n + t2 =
t01· n + t100· n + t01a· n + t1+ t01+ t2 =
Otimizando a busca linear
Custo da situac¸ ˜ao de melhor caso
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
O tempo de execuc¸˜ao do melhor caso ´e constante por quˆe? Especificamente nesta situac¸˜ao de melhor caso:
O tempo de execuc¸˜ao est´a dentro de um fator constante. O tempo de execuc¸˜ao ´e uma constante que n˜ao depende de n.
Otimizando a busca linear
Custo da situac¸ ˜ao de melhor caso
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
O tempo de execuc¸˜ao do melhor caso ´e constante por quˆe?
Especificamente nesta situac¸˜ao de melhor caso:
O tempo de execuc¸˜ao est´a dentro de um fator constante. O tempo de execuc¸˜ao ´e uma constante que n˜ao depende de n.
Otimizando a busca linear
Custo da situac¸ ˜ao de melhor caso
O tempo de execuc¸˜ao est´a entre o limite inferior (quando A[1] = x ):
Limite inferior
t1+ t10 + t01a+ t001a
O tempo de execuc¸˜ao do melhor caso ´e constante por quˆe? Especificamente nesta situac¸˜ao de melhor caso:
O tempo de execuc¸˜ao est´a dentro de um fator constante. O tempo de execuc¸˜ao ´e uma constante que n˜ao depende de n.
Otimizando a busca linear
Custo da situac¸ ˜ao de pior caso
O tempo de execuc¸˜ao tem o seguinte limite superior (se x n˜ao estiver presente):
Limite superior
(t01+ t001+ t01a) · n + (t1+ t10 + t2)
O tempo de execuc¸˜ao do pior caso depende de n por quˆe?
Especificamente nesta situac¸˜ao de pior caso:
Otimizando a busca linear
Custo da situac¸ ˜ao de pior caso
O tempo de execuc¸˜ao tem o seguinte limite superior (se x n˜ao estiver presente):
Limite superior
(t01+ t001+ t01a) · n + (t1+ t10 + t2)
O tempo de execuc¸˜ao do pior caso depende de n por quˆe? Especificamente nesta situac¸˜ao de pior caso:
Otimizando a busca linear
Custo da vers ˜ao melhorada
Podemos dizer que BUSCA-LINEAR-MELHOR ´e constante para todas as entradas a qual est´a sujeito?
Podemos dizer que BUSCA-LINEAR-MELHOR depende linearmente de n para todas as entradas a qual est´a sujeito?
N˜ao podemos dizer que o tempo de execuc¸˜ao para qualquer entrada ´e θ(n) pois, no melhor caso ´e constante.
N˜ao podemos dizer que o tempo de execuc¸˜ao para qualquer entrada ´e θ(1) pois, no pior caso depende linearmente de n.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Podemos dizer que BUSCA-LINEAR-MELHOR ´e constante para todas as entradas a qual est´a sujeito?
Podemos dizer que BUSCA-LINEAR-MELHOR depende linearmente de n para todas as entradas a qual est´a sujeito? N˜ao podemos dizer que o tempo de execuc¸˜ao para qualquer entrada ´e θ(n) pois, no melhor caso ´e constante.
N˜ao podemos dizer que o tempo de execuc¸˜ao para qualquer entrada ´e θ(1) pois, no pior caso depende linearmente de n.
Otimizando a busca linear
Custo da vers ˜ao melhorada
Todavia, podemos dizer que uma func¸˜ao linear de n ´e um limite superior para todos os casos de entrada tal que
BUSCA-LINEAR-MELHOR est´a sujeito. Para isto utiliza-se a notac¸˜ao O (Big O).
Logo, podemos dizer que o tempo de execuc¸˜ao de BUSCA-LINEAR-MELHOR ´e O(n), isto ´e “O de n”.
Notac¸ ˜ao O
Definic¸ ˜ao
Notac¸ ˜ao O
Para uma dada func¸˜ao g(n), denotamos por O(g(n)) = {f (n) : existem constantes positivas c e n0
tais que 0 ≤ f (n) ≤ cg(n) para todo n ≥ n0}
Otimizando a busca linear
Custo da vers ˜ao melhorada
Al´em disso, podemos dizer que uma func¸˜ao constante ´e um limite inferior para todos os casos de entrada tal que BUSCA-LINEAR-MELHOR est´a sujeito.
Para isto utiliza-se a notac¸˜ao Ω (ˆomega).
Logo, podemos dizer que o tempo de execuc¸˜ao de
Notac¸ ˜ao Ω
Definic¸ ˜ao
Notac¸ ˜ao Ω
Para uma dada func¸˜ao g(n), denotamos por Ω(g(n)) = {f (n) : existem constantes positivas c e n0
tais que 0 ≤ cg(n) ≤ f (n) para todo n ≥ n0}
Conclus ˜oes
Notac¸ ˜oes θ, O e Ω
BUSCA-LINEAR ´e θ(n).
BUSCA-LINEAR-MELHOR ´e O(n) e Ω(1).
θ, O e Ω s˜ao notac¸˜oes assint´oticas.
θ, O e Ω capturam o crescimento de uma func¸˜ao quando o seu argumento n aproxima-se de infinito.
Podemos assim descartar detalhes tediosos e focalizar no crescimento da func¸˜ao.
Conclus ˜oes
Notac¸ ˜oes θ, O e Ω
BUSCA-LINEAR ´e θ(n).
BUSCA-LINEAR-MELHOR ´e O(n) e Ω(1). θ, O e Ω s˜ao notac¸˜oes assint´oticas.
θ, O e Ω capturam o crescimento de uma func¸˜ao quando o seu argumento n aproxima-se de infinito.
Podemos assim descartar detalhes tediosos e focalizar no crescimento da func¸˜ao.