You are on page 1of 27

Algoritmia.

BE + EEC + EINF
Pedro Melo Pinto + UTAD

2011-2012 .

Universidade de Trs-os-Montes e Alto Douro

Algoritmia
2011/2012
Bioengenharia
Engenharia Electrotcnica e de Computadores
Engenharia Informtica

Pedro Melo-Pinto
( pmelo@utad.pt )

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Algoritmia

anlise de algoritmos

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Algoritmia

anlise de algoritmos

H dois aspectos essenciais


Correco (do algoritmo)
Eficcia (do algoritmo)

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Correco

Diz-se que um algoritmo correcto se, para cada entrada, termina com a sada (ou
resultado) correcta, resolvendo deste modo o problema computacional em causa.
Um algoritmo incorrecto pode no parar com algumas entradas,
ou faz-lo mas com uma sada incorrecta.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Eficcia

Dois algoritmos podem ter eficcia completamente distinta na resoluo de


determinado problema, e estas diferenas podem ser muito mais significativas do
que as devidas ao hardware ou ao software.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Eficcia

A eficcia de um algoritmos est relacionada com a sua velocidade


de execuo e com os recursos de memria gastos.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

A anlise de um algoritmo a avaliao dos recursos que


vo ser por ele utilizados.
Embora por vezes possamos estar preocupados com a memria, a largura de
banda disponvel ou o hardware do sistema de computao, a velocidade de
execuo que queremos avaliar.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

A anlise dos algoritmos fundamental para a sua eficaz utilizao.


A experimentao extensiva e a anlise matemtica em profundidade
de cada programa que faamos impraticvel.

Teste empricos.
Anlise aproximada.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

Na anlise a fazer vamos assumir um modelo de computao RAM


(random-access machine, generic one-processor) como tecnologia de
implementao dos algoritmos.
No modelo RAM as instrues so executadas sequencialmente
(sem operaes concorrentes).

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

As instrues do modelo RAM so semelhantes s habituais nos computadores


reais: aritmticas (soma, subtraco, diviso, multiplicao, resto), manipulao
de dados (carregar, guardar, copiar), e controlo (ramificao condicional e
incondicional, chamada de subrotinas).
Cada instruo executada em tempo constante.
Os dados so tipicamente de tipo inteiro ou decimal.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

A exponenciao uma instruo que executada em tempo constante?


Em geral no. So necessrias vrias instrues para calcular xy (x e y reais).
Nalgumas circunstncias, contudo, a exponenciao uma instruo executada
em tempo constante, atravs da operao de shift left.

Em muitos sistemas de computao, a operao shift left (empurrar os bits de


um inteiro uma posio para a esquerda) equivalente multiplicao por 2.
Empurrar os bits k posies para a esquerda equivalente a multiplicar por 2k.
Vamos considerar, no nosso modelo RAM, que 2k uma operao de tempo
constante se k um inteiro positivo pequeno.

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Anlise de um Algoritmo

No modelo RAM no est includa a hierarquia de memria, comum nos


computadores actuais, ou seja, no modelamos a memria cache ou virtual.
Por vezes os efeitos desta hierarquia so significativos.
Os modelos que incluem esta hierarquizao da memria so significativamente
mais complexos e difceis de trabalhar.
As anlises baseadas no modelo RAM so normalmente excelentes
antecipadoras do desempenho dos sistemas reais.

Algoritmia. BE + EEC + EINF

13

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

Imagem digital

Algoritmia. BE + EEC + EINF

14

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

Imagem digital

15

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

Imagem digital
77

77

77

255

255

255

77

77

77

255

255

255

77

77

77

255

255

255

178

178

178

178

178

178

178

178

178

Algoritmia. BE + EEC + EINF

16

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

Imagem digital

Algoritmia. BE + EEC + EINF

17

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>

#define NLINES 1024


#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
img[i][j-1]+img[i][j]+img[i][j+1]+
(operao de) convoluo
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;

return(0);
}

Algoritmia. BE + EEC + EINF


Pedro Melo Pinto + UTAD

18

2011-2012 .

Viso por Computador

(manipulao de imagens digitais)

EXEMPLO

19

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

20

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

EXEMPLO

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>
#define NLINES 1024
#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];

Eficcia ?

ler_imagem(img,NLINES,NCOLUMNS);

for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
img[i][j-1]+img[i][j]+img[i][j+1]+
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;
return(0);
}

10

Algoritmia. BE + EEC + EINF

21

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>

#define NLINES 1024


#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];

Eficcia (em funo do n de elementos) ?

ler_imagem(img,NLINES,NCOLUMNS);

for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
img[i][j-1]+img[i][j]+img[i][j+1]+
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;

return(0);
}

Algoritmia. BE + EEC + EINF


Pedro Melo Pinto + UTAD

22

2011-2012 .

Viso por Computador

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>
#define NLINES 1024
#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
img[i][j-1]+img[i][j]+img[i][j+1]+
convoluo
= 8 operaes de adio e uma de diviso
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;
return(0);
}

11

23

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>

#define NLINES 1024


#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
img[i][j-1]+img[i][j]+img[i][j+1]+
convoluo
= 8 operaes de adio e uma de diviso
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;

return(0);
}

Quantas somas e quantas divises no total ?

24

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>
#define NLINES 1024
#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
este ciclo efectuado NLINES-2 vezes
img[i][j-1]+img[i][j]+img[i][j+1]+
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;
return(0);
}

Quantas somas e quantas divises no total ?

12

25

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>

#define NLINES 1024


#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
para cada uma dessas vezes, o ciclo interior
img[i][j-1]+img[i][j]+img[i][j+1]+
efectuado NCOLUMNS-2 vezes
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;

return(0);
}

Quantas somas e quantas divises no total ?

26

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>
#define NLINES 1024
#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
for(j=1;j<NCOLUMNS-1;j++)
Noimg[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
total so efectuadas 8*(NLINES-2)*(NCOLUMNS-2) somas
eimg[i][j-1]+img[i][j]+img[i][j+1]+
(NLINES-2)*(NCOLUMNS-2) divises
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;
return(0);
}

Quantas somas e quantas divises no total ?

13

27

Algoritmia. BE + EEC + EINF

2011-2012 .

Viso por Computador

Pedro Melo Pinto + UTAD

(manipulao de imagens digitais)

EXEMPLO

#include <stdio.h>

#define NLINES 1024


#define NCOLUMNS 1024
void ler_imagem(int[][],int,int);
main()
{
int i,j,img[NLINES][NCOLUMNS];
ler_imagem(img,NLINES,NCOLUMNS);
for(i=1;i<NLINES-1;i++)
9*(NLINES-2)*(NCOLUMNS-2) operaes
for(j=1;j<NCOLUMNS-1;j++)
img[i][j]=(img[i-1][j-1]+img[i-1][j]+img[i-1][j+1]+
como o n deimg[i][j-1]+img[i][j]+img[i][j+1]+
elementos da matriz N = NLINES*NCOLUMNS
img[i+1][j-1]+img[i+1][j]+img[i+1][j+1])/9;
podemos
dizer que o n de operaes c*N

return(0);
}

Quantas somas e quantas divises no total ?

Algoritmia. BE + EEC + EINF

28

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

14

29

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}
}

30

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

o ciclo exterior executado n-1 vezes

15

31

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

o ciclo exterior executado n-1 vezes

Algoritmia. BE + EEC + EINF

32

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

quantas vezes executado o ciclo interior ?

16

Algoritmia. BE + EEC + EINF

33

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

quantas vezes executado o ciclo interior ?

Algoritmia. BE + EEC + EINF

34

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

EXEMPLO

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

depende do ordenamento
anterior dos dados

17

35

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

c6
c7

(ti-1)
(ti-1)

c8

EXEMPLO

n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Cada operao executada em tempo constante.


Uma operao pode ser executada num tempo diferente de outra.
Cada operao i executada num tempo ci , em que ci uma constante.

36

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;

for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}
}

EXEMPLO

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

c6
c7
c8

(ti-1)
(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

O tempo de execuo do algoritmo de ordeno por insero depende de:


1. tamanho da entrada (n no nosso caso)
2. do tipo de ordenao dos valores de entrada
Em geral o tempo de execuo aumenta com o tamanho da entrada.

18

Algoritmia. BE + EEC + EINF

37

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

c6
c7

(ti-1)
(ti-1)

c8

EXEMPLO

n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

tempo de execuo = somatrio dos tempos de execuo parciais

Algoritmia. BE + EEC + EINF

38

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;

for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}
}

EXEMPLO

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

c6
c7
c8

(ti-1)
(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Melhor caso (o vector est previamente ordenado)

19

Algoritmia. BE + EEC + EINF

39

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

c6
c7
c8

EXEMPLO

(ti-1)
(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

Algoritmia. BE + EEC + EINF

40

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

custo

nvezes

c1

c2
c4
c5

n-1
n-1
ti

Este tipo de anlise pode ser simplificado


c6
(t -1)

c7
c8

(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

20

Algoritmia. BE + EEC + EINF

41

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

custo

nvezes

for(i=1;i<n;i++)
c1
n
{
aux = v[i];
c2
n-1
j = i;
c4
n-1
mais simples ordenar uma sequncia j (total ou parcialmente)
ordenada
while(j>0 && v[j-1]>aux)
c5
ti
{
v[j] = v[j-1];
c6
(ti-1)
j = j - 1;
c7
(ti-1)
ordenar
poucos elementos mais fcil do que ordenar muitos
}
v[j] = aux;
c8
n-1
}
}
(ti o n de vezes
que o ciclo while
executado para cada i)
Pior caso
(o vector est inversamente ordenado)

O tempo de execuo depende da entrada

Caracterizar o tempo de execuo pelo tamanho da entrada

Em geral procuramos o limite superior do tempo de execuo

Algoritmia. BE + EEC + EINF

42

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

custo

nvezes

caso-pior: (normalmente)
T(n) = tempo mximo de execuo de um algoritmo para
for(i=1;i<n;i++)
c1 n. n
qualquer entrada de tamanho
{
aux = v[i];
c2
n-1
j = i;
c4
n-1
while(j>0 && v[j-1]>aux)
c5
ti
{
v[j] = v[j-1];
c6
(ti-1)
j = j - 1;
c7
(ti-1)
(necessita} que se assuma uma distribuio estatstica das entradas de
v[j] = aux;
c8
n-1
anda geralmente perto do caso-pior
modo a modelarmos a entrada mdia)
}
}
(ti o n de vezes
que o ciclo while
executado para cada i)
Pior caso
(o vector est inversamente ordenado)

caso-mdio: (por vezes)


T(n) = tempo esperado de execuo de um algoritmo para as
entradas de tamanho n.

caso-melhor: (ilusrio)
T(n) = tempo de execuo - rpido - de um algoritmo para
alguma(s) entrada(s).

21

43

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

custo

nvezes

c1

Qual o tempo de execuo do caso-pior do


c2
n-1
algoritmo de ordenao por insero
?
c4
n-1
c5
t
Depende da velocidade do computador.
i

c6
c7

(ti-1)
(ti-1)

Anlise assimpttica:c8

n-1

Ignorar as constantes dependentes da mquina.


(t o n de vezes
Olhar para o crescimento de t(n) quando
n while
.
que o ciclo
i

executado para cada i)


Pior caso
(o vector est inversamente ordenado)

44

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

Notao assimpttica

Big Omicron

for(i=1;i<n;i++)Notao-O (limite
{
aux = Die
v[i];
Paul Bachmann.
analytische
Zahlentheorie
j = i; (1894)
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}
}

custo

superior):c1

nvezes

c2
n-1
Edmund Landau,
Handbuch der Lehre von
der Primzahlen (1909).
c4der Verteilungn-1
c5
ti
c6
c7
c8

(ti-1)
(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

origem

22

45

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

Big Omicron

Notao assimpttica

custo

nvezes

for(i=1;i<n;i++)Notao-O (limite superior):c1


n
{
aux = v[i];
c2
n-1
j = i; adequada
c4
n-1
Sejam
as funes
f(n) do
e g(n).
para
a anlise
caso-pior
while(j>0 && v[j-1]>aux)
c5
ti
{
v[j] = v[j-1];
c6
(ti-1)
f(n) = O(g(n))
j = j - se
1;existirem as constantes c > 0, n c7
(ti-1)
>
0
0
}
tal que 0 f(n) cg(n) para todos os nc8 n0 n-1
v[j] = aux;
}
(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

46

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

Big Omega

Notao assimpttica

custo

nvezes

for(i=1;i<n;i++)Notao- (limite inferior):c1


n
{
aux = v[i];
c2
n-1
j = i;
n-1
Sejam as funes f(n) e g(n). c4
while(j>0 && v[j-1]>aux)
c5
ti
{
v[j] = v[j-1];
c6
(ti-1)
f(n) = (g(n))
j = j - se
1;existirem as constantes c > 0, n c7
(ti-1)
>
0
0
}
tal que 0 cg(n) f(n) para todos os nc8 n0 n-1
v[j] = aux;
}
(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

23

47

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

Big Theta

Notao assimpttica

custo

nvezes

for(i=1;i<n;i++) Notao- (entre limites):c1


n
{
aux = v[i];
c2
n-1
j = i;
n-1
Sejam as
e g(n). c4
(g(n))
= funes
O(g(n))f(n)
(g(n))
while(j>0 && v[j-1]>aux)
c5
ti
{
v[j] = v[j-1];
c6
(ti-1)
f(n) = (g(n))
j = se
j -existirem
1;
(ti-1)
as constantes c1 > 0, c2 > 0,c7n0 > 0
}
tal que 0 c1g(n) f(n) c2 g(n) para todosc8os n nn-1
0
v[j] = aux;
}
(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

( T. Cormen et al. Introduction to Algorithms, 2nd edition. )

48

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

void InsertionSort(int v[N], int n)


{
int i,j,aux;

custo

nvezes

c1

c2
c4
c5

n-1
n-1

Crescimento de funes

for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}
}

ti

c6
c7
c8

(ti-1)
(ti-1)
n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

24

49

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

Qual o nmero mximo de elementos processveis em t,


supondo que o nosso sistema de computao processa 10 6
instrues por segundo, e que um conjunto de n elementos
leva f(n) instrues a processar, ou seja:
nmax = ? se t = f(n) * 106 seg
Exemplo
Se f(n) = n2, ento em 60 segundos o mximo n ser:
n2 60 * 106
n (60 * 106 )
n 7745,9
nmax 7746

50

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

nmax = ? se t = f(n) * 106 seg


1 seg

1 min

1 hora

1 dia

1 ms

1 ano

1 sc

lg n
sqrt n
n
n lg n
n2
n3
2n
n!

25

51

Algoritmia. BE + EEC + EINF

2011-2012 .

Pedro Melo Pinto + UTAD

nmax = ? se t = f(n) * 106 seg


1 seg

1 min

1 hora

1 dia

1 ms

1 ano

1 sc

1,00E+12

3,60E+15

1,30E+19

7,50E+21

6,75E+24

1,00E+27

1,00E+31

1,00E+06

6,00E+07

3,60E+09

8,64E+10

2,59E+12

3,15E+13

3,15E+15

n lg n

lg n

>1E300

sqrt n

62800

2,80E+06

1,30E+08

1000

7746

60000

293939

1,61E+06

5,62E+06

5,62E+07

100

391

1532

4420

13736

31593

146645

20

25

31

36

41

44

51

n!

11

12

13

15

16

17

n
n

Algoritmia. BE + EEC + EINF

52

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

EXEMPLO

custo

nvezes

c1

Qual o tempo de execuo do caso-pior


do
c2
n-1
c4
n-1
algoritmo de ordenao por insero
?

c5

ti

c6
c7

(ti-1)
(ti-1)

c8

n-1

(tmaior
n de vezes
i o ordem.
(neste contexto) S vamos considerar o termo de

Os outros termos so relativamente insignificantes

Pior caso
Tambm
vamos ignorar
o coeficiente
(o vector
est inversamente
ordenado)

que o ciclo while


executado
para cada i)
(para
um n elevado).

do maior termo (as constantes so menos


significativas na determinao da eficcia para entradas grandes).

26

53

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;

for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

EXEMPLO

custo

nvezes

c1

Qual o tempo de execuo do caso-pior


do
c2
n-1
c4
n-1
algoritmo de ordenao por insero
?

c5

ti

c6
c7

(ti-1)
(ti-1)

c8

T(n) = O(n2)

n-1

(ti o n de vezes
que o ciclo while
executado para cada i)

Pior caso
(o vector est inversamente ordenado)

54

Algoritmia. BE + EEC + EINF

2011-2012 .

Ordenao

Pedro Melo Pinto + UTAD

(mtodo de ordenao por insero)

void InsertionSort(int v[N], int n)


{
int i,j,aux;
for(i=1;i<n;i++)
{
aux = v[i];
j = i;
while(j>0 && v[j-1]>aux)
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = aux;
}

EXEMPLO

custo

nvezes

c1

Qual o tempo de execuo do caso-pior


do
c2
n-1
c4
n-1
algoritmo de ordenao por insero
?
c5

ti

c6
c7

(ti-1)
(ti-1)

c8

n-1

}
(ti o n de vezes
Habitualmente
considera-se um algoritmo mais eficaz
do que outro, se o
que o ciclo while
tempo de execuo do seu caso-pior tem uma ordemexecutado
de crescimento
menor.
para cada
i)
Pior caso
Devido s constantes e aos termos
(o vector est inversamente ordenado)

de menor ordem, esta assuno pode estar


errada para entradas de pequeno tamanho.

27