Sunteți pe pagina 1din 17

Universidade Federal de Viosa

Departamento de Informtica
Centro de Cincias Exatas e Tecnolgicas
Universidade Federal de Viosa

INF 112 Programao 2


Aula 4

Introduo Anlise de Algoritmos


2
Aula baseada nos slides disponibilizados por Anany Levitin (autor do livro: The
Design and Analysis of Algorithms) e nas aulas do Prof. Fabio Ribeiro
Introduo Anlise de Algoritmos


Notao assinttica
INF 112 Programao 2


Como visto, a anlise de eficincia de
algoritmos normalmente se concentra na
ordem de complexidade da operao
bsica do algoritmo.

Para comparar essa ordem, so utilizadas
trs notaes: O, ,

Vamos estudar tais notaes de maneira
informal.

Universidade Federal de Viosa 2


Departamento de Informtica
Introduo Anlise de Algoritmos


Notao assinttica: O (o maisculo), ,
INF 112 Programao 2


O(g(n)) : conjunto de todas as funes com ordem de
crescimento menor ou igual a g(n).

(g(n)) : conjunto de todas as funes com ordem de
crescimento maior ou igual a g(n).

(g(n)) : conjunto de todas as funes com mesma ordem de
crescimento que g(n).

Vamos nos concentrar na notao O.

Universidade Federal de Viosa 3


Departamento de Informtica
Introduo Anlise de Algoritmos


O(g(n)) : conjunto de todas as funes com
INF 112 Programao 2

ordem de crescimento menor ou igual a g(n).



n O(n)

n O(n)

n O(n)

100n + 999999999 O(n)

100n + 999999999 O(n)

2n O(n)

Universidade Federal de Viosa 4


Departamento de Informtica
Introduo Anlise de Algoritmos


O(g(n)) : conjunto de todas as funes com
INF 112 Programao 2

ordem de crescimento menor ou igual a


g(n).

999999999999n O(n)

n O(n)

n + 3n + 100n O(n)

0.000000000000000000000001n O(n)

Universidade Federal de Viosa 5


Departamento de Informtica
Introduo Anlise de Algoritmos

Definio: uma funo t(n) est em O(g(n)), denotando-se por t(n) O(g(n)), se t(n)
limitada superiormente por algum mltiplo constante de g(n) para todo n grande. Ou seja,
se existem alguma constante positiva c e um inteiro no negativo n0 tais que:
INF 112 Programao 2

t(n) cg(n), para todo n n0

Universidade Federal de Viosa 6


Departamento de Informtica
Introduo Anlise de Algoritmos

Propriedades da notao assinttica:

t(n) O(t(n))
INF 112 Programao 2


Ex: n O(n)

Se t(n) O(g(n)) e g(n) O(h(n)), ento t(n) O(h(n)).

Ex: n O(n) e n O(n) n O(n)
Se t1(n) O(g1(n)) e t2(n) O(g2(n)), ento t1(n) + t2(n)
O( max{g1(n), g2(n) } )

Ex: n O(n), n O(n) n + n O(max{n,n}) = O(n)

Universidade Federal de Viosa 7


Departamento de Informtica
Introduo Anlise de Algoritmos

Qual a relao destas propriedades com os algoritmos?

A ltima propriedade afirma que a eficincia geral do algoritmo
INF 112 Programao 2

determinada pela parte com maior ordem de complexidade (a


menos eficiente).

Assim, se um algoritmo possui dois trechos, sendo que o
primeiro executa a operao bsica 3n vezes e a segunda
executa a operao bsica n vezes, ento o algoritmo ter
complexidade O(n).

Universidade Federal de Viosa 8


Departamento de Informtica
Introduo Anlise de Algoritmos

Mais propriedades:
Toda funo logartmica pertence classe O(log(n)),
INF 112 Programao 2

independente da base (>1) do logartimo.



Todos os polinmios de grau k pertencem classe
O(nk). Ex: n + 5n + 1000n O(n)

Universidade Federal de Viosa 9


Departamento de Informtica
Introduo Anlise de Algoritmos

Classes bsicas de eficincia

Mesmo com a notao assinttica agrupando funes que diferem por
INF 112 Programao 2

mltiplos constantes, ainda assim h infinitas classes de complexidade (ex:


funes do tipo an pertencem a diferentes classes dependendo do valor de a).

Porm, a MAIORIA dos algoritmos se enquadra em poucas classes bsicas de
eficincia.
Classe Nome
1 constante
log(n) logartmica
n linear Polinomiais
n log(n) n-log-n
n quadrtica
n cbica
2n exponencial
Exponenciais
n! fatorial

Universidade Federal de Viosa 10


Departamento de Informtica
Introduo Anlise de Algoritmos

Em geral, um algoritmo de classe mais baixa (O(n)) muito mais
eficiente do que um algoritmo de uma classe mais alta (ex: O(n) ).
INF 112 Programao 2


Porm, pode haver algumas excees:

Por exemplo, um algoritmo que executa 10n operaes bsicas
poderia ser menos eficiente do que um algoritmo que realiza n
operaes bsicas para n 10.

Porm, essas anomalias so MUITO RARAS. Em geral, pode-se
assumir que um algoritmo O(n) mais eficiente do que um O(n)
mesmo para entradas de tamanho moderado.

Universidade Federal de Viosa 11


Departamento de Informtica
Introduo Anlise de Algoritmos

Como analisar um algoritmo e descobrir qual a sua classe de complexidade?
1.Identificar a operao bsica do algoritmo.
INF 112 Programao 2

2.Identificar a melhor forma de se definir o tamanho da entrada.


3.Verificar se o nmero de vezes que ela executada pode variar para diferentes
entradas de um mesmo tamanho. Se for o caso, deve-se analisar o melhor caso,
pior caso e caso mdio.
4.Determinar uma funo f(n) que representa o nmero de vezes que a funo
bsica executada em funo do tamanho da entrada.
5.Determinar a qual classe de complexidade f(n) pertence.

Universidade Federal de Viosa 12


Departamento de Informtica
Introduo Anlise de Algoritmos

Exemplo:
int maxElement(int v[],int n) {
INF 112 Programao 2

int mx = v[0];
for(int i=1;i<n;i++)
if (v[i] > mx)
mx = v[i];
return mx;
}

Operao bsica: comparao.

Tamanho da entrada: nmero de elementos no array (n).

O nmero de comparaes sempre o mesmo para arrays de mesmo tamanho.
n1

Nmero de comparaes: 1 1 = n-1

Classe de complexidade: O(n)

Universidade Federal de Viosa 13


Departamento de Informtica
Introduo Anlise de Algoritmos

Exemplo:

int find(int v[],int n,int elem) {


INF 112 Programao 2

for(int i=0;i<n;i++)
if (v[i] == elem)
return i;
return -1;
}

Operao bsica: comparao.

Tamanho da entrada: nmero de elementos no array (n).

O nmero de comparaes varia dependendo do arranjo...
n1

Nmero de comparaes no pior caso: 1 = n
0

Classe de complexidade: O(n)

Exerccio: como seria no melhor caso? e no caso mdio (supondo que todo arranjo contm
o elemento e que a probabilidade dele estar em uma posio a mesma para todas
posies) ?

Universidade Federal de Viosa 14


Departamento de Informtica
Introduo Anlise de Algoritmos

Exemplo:
int numDigitos(int n) { //suponha que n>0
INF 112 Programao 2

int ct = 0;
while( n != 0) {
n/=10;
ct++;
}
return ct;
}

Operao bsica: diviso.

Tamanho da entrada: o nmero n.

O tamanho de n dividido por 10 em cada iterao... o nmero de comparaes
aproximadamente: log(n) (base 10)

Classe de complexidade: O(log(n))

Universidade Federal de Viosa 15


Departamento de Informtica
Introduo Anlise de Algoritmos

Exemplo:
int matrixMult(int **a, int **b, int **c, int n) { //suponha que n>0
INF 112 Programao 2

for(int i=0;i<n;i++)
for(int j=0;j<n;j++) {
int resp = 0;
for(int k=0;k<n;k++)
resp += a[i][k]*b[k][j];
c[i][j] = resp;
}
}

Operao bsica: multiplicao.

Tamanho da entrada: o lado da matriz (n).
n1 n1 n1

Nmero de multiplicaes: 1=n3
0 0 0

Classe de complexidade: O(n)

Universidade Federal de Viosa 16


Departamento de Informtica
Introduo Anlise de Algoritmos

No caso de algoritmos recursivos, a anlise de complexidade um
pouco mais difcil de ser realizada.
INF 112 Programao 2


Estudos mais detalhados sobre este tema fogem do escopo desta
disciplina (vamos trabalhar de forma muito informal a anlise de
algoritmos).

Por enquanto, o importante ter uma ideia de como funciona a anlise
de complexidade e reconhecer a complexidade de algoritmos simples.

O conhecimento sobre a complexidade de algoritmos muito
importante: ajuda a encontrar gargalos em cdigos, a escolher o
algoritmo mais adequado para cada situao, etc.

Universidade Federal de Viosa 17


Departamento de Informtica

S-ar putea să vă placă și