Você está na página 1de 45

PAA-DCC-UFAM

Conceitos Bsicos

Universidade Federal do Amazonas


Departamento de Eletrnica e Computao

PAA-DCC-UFAM

Algoritmos
Um algoritmo: A essncia de um procedimento
computacional composto por instrues seqenciais
passo a passo
procedimento computacional bem definido (valores de
entrada e sada ordenao de nmeros)

Um programa: Implementao de um algoritmo


em uma dada linguagem de programao
Estrutura de dados: forma de organizar os
dados necessrios soluo de um problema

PAA-DCC-UFAM

Soluo Algoritmica
Instncia de
Entrada
atendendo a

especificao

Algoritmo

Sada
relacionada
Entrada

O Algoritmo descreve aes sobre a instncia de


entrada
Existem infinitos algoritmos corretos para um
mesmo problema algortmico

PAA-DCC-UFAM

Definio Formal: Ordenao


SADA

ENTRADA

uma permutao (reordenao)


da sequncia de entradas

sequncia de nmeros

a1, a2, a3,.,an


2

10

b1,b2,b3,.,bn

Ordenao
2

10

(instncia)

Corretude
Para qualquer entrada dada, o
algortimo termina com sada
b1, b2, b3, ., bn, onde
b1 < b2 < b3 < . < bn

Tempo de Execuo
Depende de:
nmero de elementos (n)
o quo (parcialmente)
ordenada est a lista
soluo algoritmica
disp. de armazenamento

PAA-DCC-UFAM

Problema Algortmico
Especificao
da
Entrada

Especificao
da Sada como
funo da
Entrada

Existe um nmero infinito de instncias da entrada


que satisfazem a especificao. Por exemplo:
Uma seqncia finita, ordenada, no decrescente de nmeros
naturais:
1, 20, 908, 909, 100000, 1000000000
3, 15, 105, 876, 1000, 100000

PAA-DCC-UFAM

Primeiro Algoritmo
O nosso primeiro algoritmo, o de ordenao por
insero, resolve o problema de ordenao
Entrada: <a1, a2,...an>
Sada: <a1, a2,...an> tal que a1 a2 ... an

Procdimento:
1. Mo esquerda vazia e cartas p/ baixo
2. Remove uma carta inser. na pos. correta
3. Compara as cartas da direita p/ esquerda

PAA-DCC-UFAM

Ordenao por Insero


Entrada: <5,2,4,6,1,3>
Sada: <1,2,3,4,5,6>

PAA-DCC-UFAM

Ordenao por Insero


A

5 1

j
i

insira A[j] na sequncia


ordenada A[1..j-1]

n
1)
2)
3)
4)

j=2; pivot=4; i=1; A[2]=4


j=3; pivot=6; i=2; A[3]=6
j=4; pivot=8; i=3; A[4]=8
j=5; pivot=9; i=4; A[5]=9

1 para j=2 at n
2
faa pivot:=A[j]
3
i j-1
4
enquanto i>0 e A[i]>pivot faa
5
A[i+1] A[i]
6
i--;
7
fim-enquanto
8
A[i+1] pivot;

PAA-DCC-UFAM

Exerccio: Ordenao por Insero


1) Implemente o algoritmo da ordenao por insero
usando a linguagem C ou C++. Analise o algoritmo
em termos dos loops para os seguintes casos:
a) Os elementos do vetor j esto ordenados
b) Os elementos do vetor esto em ordem inversa
c) Alguns elementos do vetor no esto ordenados

2) Agora considere um vetor com 1K, 10K, 100K e 1M


posies e compute o tempo de execuo usando
o comando time para cada um dos casos a), b) e c)

Soluo Algoritmica em Sistemas


Discretos

PAA-DCC-UFAM

Um sistema discreto (SD) um operador matemtico


transforma um sinal em um outro sinal
usa um conjunto fixo de operaes
X(n)

Y(n) = T[x(n)]

T [.]
Um sinal de entrada x(n) transformado em um sinal
de sada y(n) atravs da transformao T[.]
A relao de entrada e sada pode ser expressada em
termos de uma funo ou regra matemtica

Exemplo de Soluo Algoritmica


em Sistema Discreto

PAA-DCC-UFAM

Considere um sistema discreto modelado pela


seguinte eq. de diferena
y (n ) = ay (n 1) + x(n )

1, n = 0
x ( n) =
0, n 0

substituido a=-1/2 e aplicando a funo de impulso unitrio


y (0) = ( 0.5) 0 + 1 = 1

y (1) = ( 0.5) 1 + 0 = 0.5

y (2) = ( 0.5) ( 0.5) + 0 = 0.25


K
1
y (0 ) + y (1) + K y (n ) =
=2
1 0.5

for(i=0; i<n; i++) {


if (i==0)
y[0] = x[0];
else
y[i]=-a*y[i-1]+x[i];
}

PAA-DCC-UFAM

Exerccio: Sistema Discreto


1) Fornea o algoritmo para implementar o seguinte
sistema discreto (de um passa baixa IIR segunda
ordem) considerando a=0.4375 e b=-0.125
y(n) = ay(n-1) by(n-2) + x(n)

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo linear
N o nmero de sada no passado
M o nmero das entradas atuais e do passado
N

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo linear
N o nmero de sada no passado
M o nmero das entradas atuais e do passado

y(n) a sada
no instante n

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo
linear
y(n-k)
a sada
no
N o nmero de sadaknopassos
passado
passado

M o nmero das entradas atuais e do passado

y(n) a sada
no instante n

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo
linear
x(n-k) a
y(n-k)
a sada
no
N o nmero de sadaknopassos
passado
passado

entrada k passos
no passado

M o nmero das entradas atuais e do passado

y(n) a sada
no instante n

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo
linear
x(n-k) a
y(n-k)
a sada
no
N o nmero de sadaknopassos
passado
passado

entrada k passos
no passado

M o nmero das entradas atuais e do passado

y(n) a sada
no instante n

ak so os

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

coeficientes para
as sadas

PAA-DCC-UFAM

Filtros Digitais
Filtros digitais podem ser definidos como sistema de
tempo discreto no tempo
linear
x(n-k) a
y(n-k)
a sada
no
N o nmero de sadaknopassos
passado

entrada k passos
no passado

passado

M o nmero das entradas atuais e do passado

y(n) a sada
no instante n

ak so os

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

coeficientes para
as sadas

bk so os

coeficientes para
as entradas

PAA-DCC-UFAM

Tipos de Filtros Digitais


Filtros digitais so geralmente classificados de acordo
com as caractersticas do domnio da frequncia
Passa-baixa: atenua frequncias mais elevadas do que a
frequncia de corte
Passa-alta: atenua freqncias mais baixas do que a
frequncia de corte
Passa-banda: atenua frequncias fora da faixa entre as
frequncias de corte
Bandstop: atenua frequncias dentro da faixa entre as
frequncias de corte
Passa-tudo: no atenua nenhuma frequncia, geralmente
muda apenas a fase do sinal

PAA-DCC-UFAM

Anlise e Projeto de Filtro (Matlab)


fdatool: permite projetar filtros digitais no Matlab

Exportar os coeficientes: file->export, workspace

PAA-DCC-UFAM

Anlise e Projeto de Filtro (Matlab)


[B, A] = sos2tf(SOS,G): obtm a funo de
transferncia com os respectivos coeficientes
B = 0.2066

0.4131

0.2066

A = 1.0000

-0.3695

0.1958

format long: aumenta o tamanho do formato dos


nmeros
fi(B,1,7,5): 1: bit do sinal; 7: tamanho da palavra; 5:
parte fracionria
fi(A,1,7,5): 1: bit do sinal; 7: tamanho da palavra; 5:
parte fracionria

PAA-DCC-UFAM

Anlise e Projeto de Filtro (Matlab)


Matlab retorna os seguintes coeficientes:
B = 0.21875

0.40625

0.21875

A = 1.0000

-0.375

0.1875

aplicando os coeficientes em:


N

k =1

k =0

y (n ) = ak y (n k ) + bk x(n k )

temos:
y (n ) = 0.375 y (n 1) 0.1875 y (n 2 ) + 0.21875 x(n )

+ 0.40625 x(n 1) + 0.21875 x(n 2 )

PAA-DCC-UFAM

Loop Invariante
Loop invariante uma invariante usada para provar
propriedades de loops:
nos ajudam a entender por que um algoritmo correto

Devemos mostrar trs detalhes:


Inicializao: verdadeiro antes da inicializao do loop
Manuteno: Se for verdadeiro antes de uma iterao
do loop, permanecer verdadeiro antes da prxima iterao
Trmino: Quando o loop termina, a invariante fornece
uma propriedade til para mostrar que o algoritmo
correto

PAA-DCC-UFAM

Padro do Loop Invariante


O padro geral para inserir loop invariante no
cdigo dado por:
...
// the Loop Invariant must be true here
while ( TEST CONDITION ) {
// top of the loop
...
// bottom of the loop
// the Loop Invariant must be true here
}
// Termination + Loop Invariant = Goal
...

PAA-DCC-UFAM

Exemplo: Loop Invariante


Considere o seguinte cdigo:
#define SIZE 10
int x;
void main() {
while (x<SIZE)
x=x+1;
}

Qual seria o loop invariante? X<=10


Qual seria a condio de parada? X==10

PAA-DCC-UFAM

Exemplo: Loop Invariante


Considere o seguinte cdigo:
#define SIZE 10
int x;
void main() {
assert(x<=10);
while (x<SIZE) {
x=x+1;
assert(x<=10);
}
assert(x<=10);
assert(x==10);
}

Qual seria o loop invariante? X<=10


Qual seria a condio de parada? X==10

PAA-DCC-UFAM

Loop Invariante (1)


No comeo de cada iterao do loop para (linhas
de 1 a 8), o subarranjo A[1..j-1] consiste dos
elementos contidos originalmente em A[1..j-1] , mas
em sequncia ordenada
Prova das propriedades:
Inicializao: mostrar que o loop invariante vlido
antes da primeira iterao do loop
quando j=2 ento o subarranjo A[1..j-1] consiste apenas
do nico elemento A[1], que de fato o elemento original
A[1]. Alm disso, esse subarranjo ordenado e isso mostra
que o loop invariante vlido antes da primeira iterao

PAA-DCC-UFAM

Loop Invariante (2)


Manuteno: demonstrar que cada iterao mantm o
loop invariante
O corpo do loop para funciona deslocando-se A[j-1], A[j-2], A[j3] e da por diante uma posio a esquerda, at ser encontrada a
posio adequada para A[j] (linhas 3 a 7), e nesse ponto o valor
de A[j] inserido

Trmino: examinar o que ocorre quando o loop termina


O loop para externo termina quando j excede n, isto ,
quando j=n+1. Substituindo j por n+1 no enunciado do loop
invariante, temos que o subarranjo A[1..n] consiste nos
elementos originalmente contidos em A[1..n], mas em
sequncia ordenada

PAA-DCC-UFAM

Loop Invariante (Ordenao)


O algoritmo dito correto se a condio de
parada alcanada e o loop invariante verdadeiro
1 para j =2 at n
2 // Invariante: A[1..j-1] uma seq. ordenada do
original A[1..j-1]
3
faa pivot:=A[j]
4
i j-1
5
enquanto i>0 e A[i]>pivot faa
6
A[i+1] A[i]
7
i--;
8
fim-enquanto
9
A[i+1] pivot;
10 // Invariante: A[1..j-1] uma seq. ordenada do
original A[1..j-1]
11 Invariante verdadeira A[1..n] e j==n+1

PAA-DCC-UFAM

Exerccio: Loop Invariante


Enuncie um loop invariante para o loop do
seguinte filtro digital:
y (n ) = 0.5 y (n 1) + x(n )
for(i=0; i<n; i++) {
if (i==0)
y[0]=x[0];
else
y[i] = 0.5*y[i-1]+x[i];
}

1, n = 0
x ( n) =
0, n 0
for(i=0; i<n; i++) {
if (i==0)
x[0]=1;
else
x[i]=0;
}

PAA-DCC-UFAM

Anlise de Algoritmos
Prever os recursos que o algoritmo necessitar
Memria, largura de banda ou hardware

Estamos interessado na eficincia:


Tempo de execuo
Espao (memria) usado

Eficincia como funo do tamanho da entrada


Pela anlise de vrios algoritmos, podemos
identificar um algoritmo mais eficiente

PAA-DCC-UFAM

Anlise de Algoritmos
O que deve ser contabilizado?
Modelo RAM (instrues executadas de formal seq.)
No abusar do modelo de RAM (instruo de ordenao)

Instrues (considerando tempo constante):


Aritmticas (+, -, *, etc.)
Movimentao de dados (carregar, armazenar, copiar)
Controle (desvios, chamadas de procedimento, etc.)

Tamanho da entrada
Nmero de itens na entrada
Nmero total de bits

PAA-DCC-UFAM

Anlise: Ordenao por Insero


Determinar o tempo de execuo como funo do
tamanho da entrada
n vezes
para j=2 at n

n-1 vezes

faa pivot:=A[j]
i j-1
enquanto i>0 e A[i]>pivot faa
A[i+1] A[i]
i--;
fim-enquanto
A[i+1] pivot;

Para cada uma


das n-1 vezes,
tj vezes

PAA-DCC-UFAM

Anlise: Ordenao por Insero


Determinar o tempo de execuo como funo do
tamanho da entrada
vezes

para j=2 at n
n
faa pivot:=A[j]
(n-1)
(n-1)
i j-1
enquanto i>0 e A[i]>pivot faa nj = 2 t j
n
A[i+1] A[i]
nj = 2 (t j 1)
i--;
j = 2 (t j 1)
fim-enquanto
n-1
A[i+1] pivot;

custo
c1
c2
c4
c5
c6
c7
c8

PAA-DCC-UFAM

Anlise: Ordenao por Insero


Para calcular T(n), somamos os produtos das colunas custos
e vezes, obtendo:
T (n) = c1n + c2 (n 1) + c4 (n 1) + c5 t j + c6 (t j 1) + c7 (t j 1) + c8 (n 1)
n

j =2

j =2

j =2

Mesmo para entradas de um mesmo tamanho, o tempo de


execuo do algoritmo pode depender de qual entrada dada
Anlise do melhor caso
Anlise do pior caso
Anlise do caso mdio

PAA-DCC-UFAM

Melhor Caso
Melhor Caso
Elementos j ordenados
Todos os testes falham, o loop interno nunca executado
Neste caso, tj=1 e a operao executada n-1 vezes
n

t
j =2

= t 2 + t3 + K + t n = 1 + 1 + K + 1 = n 1

T (n) = c1n + c2 (n 1) + c4 (n 1) + c5 (n 1) + c8 (n 1)
T (n) = (c1 + c2 + c4 + c5 + c8 ) n (c2 + c4 + c5 + c8 )

Portanto a complexidade de tempo dada por T(n)=an-b


para constantes a e b que dependem de ci
Funo linear de n

PAA-DCC-UFAM

Pior Caso
Pior Caso
Elementos em ordem inversa

Livro do Cormen segunda


edio est errado, pois o
autor apresenta o termo
(n-1) em vez de (n+1)

Observando que:
n

j= 2

n (n + 1 )
j=
1
2

n (n 1 )
(
)
j

1
=

2
n

j= 2

Descobrimos que, no pior caso, T(n)


n(n 1)
n(n + 1)
n(n 1)
T (n) = c1n + c2 (n 1) + c4 (n 1) + c5
1 + c6
+ c7

2
2

2
c c c
c c c

+ c8 (n 1) = 5 + 6 + 7 n 2 + c1 + c2 + c4 + 5 6 7 + c8 n (c2 + c4 + c5 + c8 )
2 2 2
2 2 2

PAA-DCC-UFAM

Demonstrao do Somatrio
Srie aritmtica definida como:
n

j =1 + 2 + L + n =

j= 1

n (n + 1 )
2

Deste modo, temos:


n

j= 2

j =2 + 3 + K + n =

n (n + 1 )
1
2

De forma similar, obtemos:


n (n + 1 )
(
)
j

=
+
+
K
+
n

=
n
1
1
2
1

2
n

j= 2

n (n + 1 ) 2 n
n (n 1 )
=
2
2

PAA-DCC-UFAM

Somatrios teis

PAA-DCC-UFAM

Melhor/Pior/Mdio (1)
Melhor Caso: elementos j ordenados
tj=1, T(n) =k1 . n, ou seja, tempo linear.

Pior caso: elementos em ordem inversa


tj=j, T(n) = k2 . n2, ou seja, tempo quadrtico

Tempo mdio:
tj=j/2, T(n) = k2 . n2, ou seja, tempo quadrtico

PAA-DCC-UFAM

Melhor/Pior/Mdio (2)
Determinar o tempo de execuo para diferentes
instancias de tamanho n:
Pior
Caso

6n
Tempo de Execuo

5n
Caso Mdio

4n
Melhor Caso

3n
2
n
1n

Instncias

PAA-DCC-UFAM

Melhor/Pior/Mdio (3)
Para instncias de todos os tamanhos:
Pior Caso
worst-case
Caso Mdio
average-case

Tempo de Execuo

6n
5n

best-case
Melhor
Caso

4n
3n
2
n
1n
1

9 10

Tamanho da Entrada

11

12

PAA-DCC-UFAM

Melhor/Pior/Mdio (4)
O pior caso geralmente usado
Estabelece um limite superior na complexidade de
tempo do algoritmo
Para alguns algoritmos o pior caso bastante
freqente
Frequentemente o caso mdio to ruim quando o
pior caso
Encontrar o caso mdio pode ser muito difcil

PAA-DCC-UFAM

Funes de Crescimento
1,00E+155
1,00E+143
1,00E+131
1,00E+119

n
log n
sqrt n
n log n
100n
n^2
n^3
2^n

1,00E+107

T(n)

1,00E+95
1,00E+83
1,00E+71
1,00E+59
1,00E+47
1,00E+35
1,00E+23
1,00E+11
1,00E-01
2

16

32

64
n

128

256

512

1024

PAA-DCC-UFAM

O que razovel em computao?


funo/

10

20

50

100

300

n2

1/10,000
segundos

1/2,500
segundos

1/400
segundos

1/100
segundos

9/100
segundos

n5

1/10
segundos

3.2
segundos

5.2
minutos

2.8
horas

28.1
dias

2n

1/1000
segundos

1
segundos

35.7
anos

400
trilhes de
sculos

Sculos de
75 dgitos

nn

2.8
horas

3.3 trilhes
de anos

Seculos de
70 dgitos

Sculos de
185 dgitos

Sculos de
728 dgitos

n
Polinomial
Exponencial

Você também pode gostar