• Nenhum resultado encontrado

para resolver um problema.

N/A
N/A
Protected

Academic year: 2022

Share "para resolver um problema."

Copied!
44
0
0

Texto

(1)

Crescimento de Função

George Darmiton da Cunha Cavalcanti CIn – UFPE

(2)

Introdução

Muitas são as classes de problemas da matemática discreta:

Dada uma seqüência de inteiros, encontrar o maior;

Dado um conjunto, encontrar todos os seus subconjuntos;

Dada uma rede, encontrar o menor caminho entre dois nós.

O primeiro passo para solucionar esses problemas é construir um modelo matemático do problema

(3)

Algoritmo

É um conjunto finito e preciso de instruções

para resolver um problema.

(4)

Exemplo de um algoritmo

Encontrar o maior valor em uma lista de inteiros.

Passos:

1) O primeiro valor será o máximo temporário

2) Compare o próximo item na lista com o máximo

temporário. Torná-lo o máximo temporário caso ele seja maior que o máximo temporário;

3) Repetir os passos 1-2 enquanto houver itens na lista;

4) O máximo temporário é o maior valor da lista.

(5)

Pseudocódigo do exemplo

procedure max(a

1

, a

2

,...,a

n

:integers) max = a

1

for i=2 to n

if max < a

i

then max = a

i

{max is the largest element}

Finding the maximum element in a finite sequence

(6)

Algoritmo para busca seqüencial

procedure linearSearch(x:integer, a1, a2,...,an:integers) i = 1

while (i ≤ n and x ≠ ai) i = i + 1

if i ≤ n then location = i else location = 0

{location is the subscript of term that equals x, or is 0 if x is not found}

The linear search algorithm

(7)

Algoritmo para busca binária

procedure binarySearch(x: integer, a1, a2,...,an: increasing integers) i = 1

j = n

while i < j begin

m = [(i+j)/2]

if x > am then i = m + 1 else j = m

end

if x == ai then location = i else location = 0

{location is the subscript of term that equals x, or is 0 if x is not found}

The binary search algorithm

(8)

Ordenação (Bubble Sort)

3 2 4 1 5 Primeiro passo

2 3 4 1 5

2 3 4 1 5

2 3 1 4 5 Segundo passo

2 3 1 4 5

2 3 1 4 5

2 1 3 4 5

(9)

Ordenação (Bubble Sort)

Terceiro passo 2 1 3 4 5

1 2 3 4 5

Quarto passo 1 2 3 4 5

(10)

Bubble Sort Algorithm

procedure bubblersort(a

1

,...,a

n

) for i=1 to n-1

for j=1 to n-i

if a

j

> a

j+1

then interchange a

j

and a

j+1

(11)

Ordenação (Insertion Sort)

Java Applet Insertion Sort

(12)

Ordenação (Insertion Sort)

(13)

Ordenação (Insertion Sort)

(14)

Ordenação (Insertion Sort)

(15)

Insertion Sort Algorithm

procedure insertionsort(a1,...,an) for j=2 to n

begin i=1

while aj > ai i = i+1 m = aj

for k=0 to j – i – 1 aj-k = aj-k-1 ai = m

end

(16)

Greedy algorithms

Greedy algorithms são usados para resolver problemas de otimização:

Encontrar a menor rota entre duas cidades;

Distribuir carga entre computadores em uma rede;

Agendamento;

Bin-packing.

(17)

Greedy algorithms (exemplo)

Exemplo:

Para se ter $6.39, é possível escolher:

$6, ou seja, 6 × $1, para se ter $6 25¢, para $6.25

10¢, para $6.35

quatro 1¢, para $6.39

(18)

Greedy algorithms (exemplo)

Problema: “trocar dinheiro”

Moedas estão disponíveis nos seguintes valores:

dollars (100 centavos) quarters (25 centavos) dimes (10 centavos) nickels (5 centavos) pennies (1 centavo)

Problema

Trocar um valor utilizando o menor número de moedas possível.

(19)

Greedy algorithm

“trocar dinheiro”

procedure change(c1,c2,...,cr: values of coins, n: a positive integer)

for i=1 to r

while n ≥ ci begin

add a coin with the value ci to the change n = n – ci

end

c1 > c2 > ... >cr

(20)

Crescimento de funções

Vários algoritmos podem ser utilizados para resolver um dado problema

Fatores que devem ser levados em consideração

Tempo de Execução

Espaço de armazenamento

Problemas da área de Análise de Algoritmos

Análise de uma algoritmo em particular Análise de uma classe de algoritmos

(21)

Custo de um Algoritmo

Existem várias maneiras para se medir o custo Uma delas é medir o tempo de computação de algoritmos em uma máquina real.

Esse tipo de medida é inadequado pois:

Os resultados dependem do compilador Os resultados dependem do hardware

Quando grandes quantidades de memória são utilizadas, as medidas de tempo podem depender desse aspecto

(22)

Custo de um Algoritmo

Uma forma mais adequada de se medir o custo de um algoritmo é através de um modelo matemático O conjunto de operações a ser executada deve ser especificado, bem como o custo de cada operação Usualmente, ignora-se o custo de algumas

operações. Exemplo

Em algoritmos de ordenação, considera-se o número de comparações e ignora-se atribuições e manipulação de índices

(23)

Notação Big-O

É uma notação bastante usada para estimar o

número de operações que um algoritmo executa na medida em que a entrada cresce

Com essa notação é possível verificar a utilidade prática de um algoritmo na solução de um problema É possível, também, comparar dois algoritmos e indicar qual dos dois é mais eficiente

(24)

Notação Big-O

Estimar custo de algoritmo em relação ao tempo e ao espaço.

Definição:

Sejam f e g funções do conjunto dos inteiros (ou conjunto dos números reais) no conjunto dos números reais. Diz-se que f(x) é O(g(x)) se existem constantes C e n0 de forma que:

quando x > n0. Diz-se que f(x) é “O grande de g(x)".

(25)

Notação Big-O

A notação “big-Oh” (“O grande”) é utilizada para expressar formalmente um limite superior para a função.

Quanto se diz que f(x) é O(x2), se quer dizer que f nunca cresce mais do que cx2 a partir de um

determinado valor x e para uma constante c.

Usa-se a notação f(x) = O(g(x)) quando f(x) é “O grande de g(x)”. Isso significa que f(x) é limitada superiormente por g(x).

Aqui há um abuso de notação, pois na realidade f(x)

O(g(x)), pois O(g(x)) é o conjunto das funções que g limita superiormente.

(26)

Notação Big-O

Em termos de algoritmos, quando se diz que dentre as soluções algorítmicas para um

determinado problema, a melhor é O(x

2

) em função da entrada.

Isso significa que se alguém achar um outro

algoritmo cuja função para estimar o tempo é

O(log n) significa que a cota superior (“upper

bound”) para aquele problema diminuiu.

(27)

Exemplo

É possível observar que

x<x2 e 1<x2 quando x>1 Assim

0 x2+2x+1x2+2x2+x2 = 4x2, quando x>1 Conseqüentemente, quando C = 4 e n0 = 1

tem-se que f(x) é O(x2)

(28)

Exemplo (continuação)

Uma outra alternativa é estimar os valores de f(x) quando x > 2

2x x2 e 1x2 Conseqüentemente

0 x2+2x+1x2+x2+x2 = 3x2 Assim, quando C = 3 e n0 = 2

tem-se que f(x) é O(x2)

(29)

Exemplo (continuação)

x2+2x+1 é O(x2)

(30)

Notação Big-O

|f(x)| C|g(x)|, se x>n

0

E se |h(x)| > |g(x)| para todo x>n

0

, então

|f(x)| C|h(x)|, se x>n

0

Assim, f(x) é O(g(x))

(31)

Notação Big-O

(32)

Notação Big-O

(33)

Combinação de Funções

|f

1

(x)| C

1

|g

1

(x)|, quando x>k

1

|f

2

(x)| C

2

|g

2

(x)|, quando x>k

2

Assim,

|(f

1

+ f

2

)(x)| = |f

1

(x)+ f

2

(x)|

|f

1

(x)|+ |f

2

(x)|

Dado que

|a+b| |a|+|b|

(34)

Combinação de Funções

Quando x é maior que k1 e k2 tem-se:

|f1(x)|+ |f2(x)| C1|g1(x)|+ C2|g2(x)|

C1|g(x)|+ C2|g(x)|

= (C1+ C2)|g(x)|

= C|g(x)|

Dado que C=C1+C2 e g(x) = max(|g1(x)|,|g2(x)|)

Se f1(x) e f2(x) são O(g(x)), então (f1+f2)(x) é O(g(x)).

(35)

Combinação de Funções

Quando x é maior que k1e k2 tem-se:

|f1f2(x)| = |f1(x)| |f2(x)|

C1|g1(x)| C2|g2(x)|

C1C2|(g1g2)(x)|

C|(g1g2)(x)| ,

Dado que C=C1C2 e f1(x)f2(x) é O(g1g2)

Se f1(x) é O(g1(x)) e f2(x) é O(g2(x)), então (f1f2)(x) é O(g1(x)g2(x)).

(36)

Notação Big-Omega

A notação Big-O provê um limite superior para uma função f(x).

Um limite inferior, para valores grandes de x,

é calculado usando a notação Big-Omega.

(37)

Notação Big-Omega

Definição:

Sejam f e g funções do conjunto dos inteiros (ou conjunto dos números reais) no conjunto dos números reais.

Diz-se que f(x) é Ω(g(x)) se existem constantes C e n0 de forma que:

quando x > n0. Diz-se que f(x) é “Omega grande de g(x)".

Existe uma forte conexão entre as notações big-O e big-Ω f(x) é Ω(g(x)) se e somente se g(x) for O(f(x))

(38)

Função de Complexidade (ƒ)

(39)

Exemplo

Encontrar o maior elemento em um vetor de inteiros A[1..n], n ≥ 1

ƒ(n): é o número de comparações entre elementos de A Logo, ƒ(n) = n-1

Esse algoritmo é ótimo

(40)

Função de Complexidade (ƒ)

O exemplo mostrado no slide anterior mostra que o algoritmo é função linear do tamanho da entrada

Porém, existem algoritmos que dependem da organização dos dados de entrada. Exemplo: algoritmos de ordenação

Para esses casos três cenários podem ser destacados

(41)

Exemplo – Pesquisa Seqüencial

Problema:

Cada registro possui uma chave única.

Dada uma chave qualquer, o programa encontra o registro que contém essa chave

Solução

O algoritmo mais simples faz uma pesquisa seqüencial ƒ(n): número de registros consultados no arquivo

Casos a considerar

Melhor caso: ƒ(n) = 1 Pior caso: ƒ(n) = n

Caso Médio: ƒ(n) = (n+1)/2

(42)

Exemplo

Encontrar o maior e o menor elemento em um vetor de inteiros A[1...n]

Seja ƒ(n) o número comparações entre elementos de A ƒ(n) = 2(n1), para n >0

Para o melhor caso, pior caso e caso médio

(43)

Exemplo

Como melhorar a implementação do slide anterior?

(44)

Terminologia usada para a complexidade de algoritmos

Complexidade Fatorial O(n!)

Complexidade Exponencial O(bn), b > 1

Complexidade Polinomial O(np)

Complexidade n log n O(n log n)

Complexidade Linear O(n)

Complexidade Logarítmica O(log n)

Complexidade Constante O(1)

Terminologia Complexidade

Referências

Documentos relacionados

Periodicamente, elas lançam as suas promoções e ofertas nas redes sociais e, sendo assim, essas mídias são ferramentas de extrema importância para os resultados de um negócio.. Com

• Formado para atender às necessidades comerciais emergentes relacionadas à genética. • Fomentar

Neste trabalho, ´e proposto um algoritmo Branch-and-Bound (B&amp;B) para resolver o PML com trˆes estrat´egias distintas para calcular o limite inferior: (i) Menores Arcos; (ii)

1 -Bolsa coletora drenável: serve para coletar as fezes ou a urina.. 2 -Clipe

Ressaltam que, antes de se realizar um tratamento invasivo como o cirúrgico para a re- moção do processo estiloide, deve ser colocada uma placa interoclusal para diferenciar

” Afirma: “Eu ia tirar fotos os matos e colocar mais salas de aula, para ter mais alunos e também para colocar vasos de flor (LH, 9 anos). Um garoto de nove anos, pensa em

O verso de II Samuel 7.10 nos mostra que este é o ano em que o Eterno preparará um lugar para seu povo Israel, e isso está relacionado não somente com a herança física como também

A expressão “gestão educacional”, comumente utilizada para designar a ação dos dirigentes, surge, por conseguinte, em substituição a &#34;administração