• Nenhum resultado encontrado

oquesaoalgoritmos

N/A
N/A
Protected

Academic year: 2021

Share "oquesaoalgoritmos"

Copied!
79
0
0

Texto

(1)

Como Descrever e Avaliar Algoritmos de

Computador

Talles Brito Viana

*Apresentac¸˜ao baseada na discuss˜ao apresentada em “Algorithms:Unlocked” de Thomas H. Cormen

(2)

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.

(3)

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.

(4)

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.

(5)

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.

(6)

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.

(7)

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;

(8)

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;

(9)

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

(10)

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.

(11)

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.

(12)

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.

(13)

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.

(14)

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.

(15)

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.

(16)

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

(17)

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

(18)

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

(19)

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.

(20)

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.

(21)

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.

(22)

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.

(23)

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.

(24)

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.

(25)

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.

(26)

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

(27)

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

(28)

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)

(29)

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)

(30)

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)

(31)

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)

(32)

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)

(33)

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)

(34)

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)

(35)

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)

(36)

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)

(37)

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

(38)

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

(39)

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.

(40)

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.

(41)

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.

(42)

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

(43)

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.

(44)

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.

(45)

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.

(46)

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.

(47)

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.

(48)

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.

(49)

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.

(50)

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.

(51)

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.

(52)

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.

(53)

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.

(54)

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.

(55)

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.

(56)

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 =

(57)

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 =

(58)

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 =

(59)

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 =

(60)

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 =

(61)

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.

(62)

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.

(63)

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.

(64)

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:

(65)

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:

(66)

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.

(67)

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.

(68)

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”.

(69)

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}

(70)

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

(71)

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}

(72)

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.

(73)

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.

(74)

Crescimento de func¸ ˜oes

0 0.5 1 1.5 2 2.5 3 0 5 10 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

(75)

Crescimento de func¸ ˜oes

0 1 2 3 4 5 0 10 20 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

(76)

Crescimento de func¸ ˜oes

0 2 4 6 8 10 0 20 40 60 80 100 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

(77)

Crescimento de func¸ ˜oes

0 5 10 15 20 25 0 200 400 600 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

(78)

Crescimento de func¸ ˜oes

0 20 40 60 80 100 0 0.2 0.4 0.6 0.8 1 ·104 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

(79)

Crescimento de func¸ ˜oes

0 200 400 600 800 1,000 0 0.2 0.4 0.6 0.8 1 ·106 g(n) = 1 g(n) = lg n g(n) = n g(n) = n · lg n g(n) = n2

Referências

Documentos relacionados

No entanto, a cultura predominante na gestão das unidades produtivas sucroalcooleiras, influenciada pelas altas taxas de rentabilidade dos mercados de etanol e de açúcar,

(Você compra alguns livros durante a semana?) Aff.: I bought some books last week. (Eu comprei alguns livros

• Não há inflação de alimentos, há inflação, causada por choques cambiais, auxílio emergencial, problemas fiscais e má gestão de estoques públicos;. • O Brasil precisa

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

O segundo grupo de estratégias significativo para o ensino de Biologia é “Atividade Escrita”, constituindo o segundo grupo com maior ocorrência entre os documentos

Mais que a manufatura, que tem a possibilidade de estocar seus produtos para se ajustar aos períodos de flutuação da demanda, o estabelecimento hoteleiro sofre constantemente

§ 1º Ao cursar a quarta e última disciplina de Estágio Curricular Supervisionado, será acrescido ao processo de avaliação a elaboração de trabalho final em forma