crescimento de função - cin ufpe
TRANSCRIPT
![Page 1: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/1.jpg)
Crescimento de Função
George Darmiton da Cunha CavalcantiCIn – UFPE
![Page 2: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/2.jpg)
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
![Page 3: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/3.jpg)
Algoritmo
É um conjunto finito e preciso de instruções para resolver um problema.
![Page 4: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/4.jpg)
Exemplo de um algoritmo
Encontrar o maior valor em uma lista de inteiros.
Passos:1) O primeiro valor será o máximo temporário2) 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.
![Page 5: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/5.jpg)
Pseudocódigo do exemplo
procedure max(a1, a2,...,an:integers)max = a1
for i=2 to nif max < ai then max = ai
max is the largest element
Finding the maximum element in a finite sequence
![Page 6: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/6.jpg)
Algoritmo para busca seqüencial
procedure linearSearch(x:integer, a1, a2,...,an:integers)i = 1while (i ≤ n and x ≠ ai)
i = i + 1if i ≤ n then location = ielse location = 0
location is the subscript of term that equals x, or is 0 if x is not found
The linear search algorithm
![Page 7: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/7.jpg)
Algoritmo para busca binária
procedure binarySearch(x: integer, a1, a2,...,an: increasing integers)i = 1j = nwhile i < jbegin
m = [(i+j)/2]if x > am then i = m + 1else j = m
endif x == ai then location = ielse location = 0
location is the subscript of term that equals x, or is 0 if x is not found
The binary search algorithm
![Page 8: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/8.jpg)
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
![Page 9: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/9.jpg)
Ordenação (Bubble Sort)
Terceiro passo
2
1
3
4
5
1
2
3
4
5
Quarto passo
1
2
3
4
5
![Page 10: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/10.jpg)
Bubble Sort Algorithm
procedure bubblersort(a1,...,an)for i=1 to n-1
for j=1 to n-iif aj > aj+1 then interchange aj and aj+1
![Page 11: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/11.jpg)
Ordenação (Insertion Sort)
Java Applet Insertion Sort
![Page 12: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/12.jpg)
Ordenação (Insertion Sort)
![Page 13: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/13.jpg)
Ordenação (Insertion Sort)
![Page 14: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/14.jpg)
Ordenação (Insertion Sort)
![Page 15: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/15.jpg)
Insertion Sort Algorithm
procedure insertionsort(a1,...,an)for j=2 to nbegin
i=1while aj > ai
i = i+1m = aj
for k=0 to j – i – 1aj-k = aj-k-1
ai = mend
![Page 16: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/16.jpg)
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.
![Page 17: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/17.jpg)
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
![Page 18: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/18.jpg)
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.
![Page 19: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/19.jpg)
Greedy algorithm “trocar dinheiro”
procedure change(c1,c2,...,cr: values of coins, n: a positive integer)for i=1 to r
while n ≥ cibegin
add a coin with the value ci to the changen = n – ci
end
c1 > c2 > ... >cr
![Page 20: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/20.jpg)
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
![Page 21: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/21.jpg)
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
![Page 22: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/22.jpg)
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
![Page 23: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/23.jpg)
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
![Page 24: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/24.jpg)
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)".
![Page 25: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/25.jpg)
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 fnunca 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.
![Page 26: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/26.jpg)
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(x2) 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 (“upperbound”) para aquele problema diminuiu.
![Page 27: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/27.jpg)
Exemplo
É possível observar que x<x2 e 1<x2 quando x>1 Assim 0 ≤ x2+2x+1 ≤ x2+2x2+x2 = 4x2, quando x>1 Conseqüentemente, quando C = 4 e n0 = 1
tem-se que f(x) é O(x2)
![Page 28: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/28.jpg)
Exemplo (continuação)
Uma outra alternativa é estimar os valores de f(x) quando x > 2 2x ≤ x2 e 1 ≤ x2
Conseqüentemente 0 ≤ x2+2x+1 ≤ x2+x2+x2 = 3x2
Assim, quando C = 3 e n0 = 2 tem-se que f(x) é O(x2)
![Page 29: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/29.jpg)
Exemplo (continuação)
x2+2x+1 é O(x2)
![Page 30: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/30.jpg)
Notação Big-O
|f(x)| ≤ C|g(x)|, se x>n0
E se |h(x)| > |g(x)| para todo x>n0 , então
|f(x)| ≤ C|h(x)|, se x>n0
Assim, f(x) é O(g(x))
![Page 31: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/31.jpg)
Notação Big-O
![Page 32: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/32.jpg)
Notação Big-O
![Page 33: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/33.jpg)
Combinação de Funções
|f1(x)| ≤ C1|g1(x)|, quando x>k1
|f2(x)| ≤ C2|g2(x)|, quando x>k2
Assim,
|(f1+ f2)(x)| = |f1(x)+ f2(x)|≤ |f1(x)|+ |f2(x)|
Dado que|a+b| ≤ |a|+|b|
![Page 34: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/34.jpg)
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)).
![Page 35: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/35.jpg)
Combinação de Funções
Quando x é maior que k1 e 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)).
![Page 36: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/36.jpg)
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.
![Page 37: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/37.jpg)
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))
![Page 38: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/38.jpg)
Função de Complexidade (ƒ)
![Page 39: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/39.jpg)
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
![Page 40: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/40.jpg)
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
![Page 41: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/41.jpg)
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
![Page 42: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/42.jpg)
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(n−1), para n >0
Para o melhor caso, pior caso e caso médio
![Page 43: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/43.jpg)
ExemploComo melhorar a implementação do slide anterior?
![Page 44: Crescimento de Função - CIn UFPE](https://reader030.vdocuments.com.br/reader030/viewer/2022012520/61950bd7519cec78717e233e/html5/thumbnails/44.jpg)
Terminologia usada para a complexidade de algoritmos
Complexidade FatorialO(n!)
Complexidade ExponencialO(bn), b > 1
Complexidade PolinomialO(np)
Complexidade n log nO(n log n)
Complexidade LinearO(n)
Complexidade LogarítmicaO(log n)
Complexidade ConstanteO(1)
TerminologiaComplexidade