Académique Documents
Professionnel Documents
Culture Documents
1 Introduo
Contedo do Captulo
1.1 Algoritmos, Estruturas de Dados e Programas
1.2 Tipos de Dados e Tipos Abstratos de Dados
Projeto de Algoritmos
Introduo
Transparncias
Estruturas de dados
Estruturas de dados e algoritmos esto intimamente ligados:
no se pode estudar estruturas de dados sem considerar os
algoritmos associados a elas,
assim como a escolha dos algoritmos em geral depende da
representao e da estrutura dos dados.
Para resolver um problema necessrio escolher uma abstrao da
realidade, em geral mediante a definio de um conjunto de dados que
representa a situao real.
A seguir, deve ser escolhida a forma de representar esses dados.
Programas
Tipos de Dados
Caracteriza o conjunto de valores a que uma constante pertence, ou
que podem ser assumidos por uma varivel ou expresso, ou que
podem ser gerados por uma funo.
Tipos simples de dados so grupos de valores indivisveis (como os
tipos bsicos integer, boolean, char e real do Pascal).
Exemplo: uma varivel do tipo boolean pode assumir o valor
verdadeiro ou o valor falso, e nenhum outro valor.
Os tipos estruturados em geral definem uma coleo de valores
simples, ou um agregado de valores de tipos diferentes.
10
11
12
13
Custo de um Algoritmo
14
Funo de Complexidade
Para medir o custo de execuo de um algoritmo comum definir uma
funo de custo ou funo de complexidade f .
f (n) a medida do tempo necessrio para executar um algoritmo para
um problema de tamanho n.
Funo de complexidade de tempo: f (n) mede o tempo necessrio
para executar um algoritmo em um problema de tamanho n.
Funo de complexidade de espao: f (n) mede a memria
necessria para executar um algoritmo em um problema de tamanho
n.
Utilizaremos f para denotar uma funo de complexidade de tempo
daqui para a frente.
A complexidade de tempo na realidade no representa tempo
diretamente, mas o nmero de vezes que determinada operao
considerada relevante executada.
15
16
17
Temp : = A[ 1 ] ;
for i := 2 to N do i f Temp < A[ i ] then Temp : = A[ i ] ;
Max : = Temp;
end;
18
19
20
21
Cada registro contm uma chave nica que utilizada para recuperar
registros do arquivo.
22
1
n
n(n+1)
2
n+1
23
24
var i : integer ;
begin
Max : = A[ 1 ] ; Min : = A[ 1 ] ;
for i := 2 to N do
i f A[ i ] > Max then Max : = A[ i ] else i f A[ i ] < Min then Min : = A[ i ] ;
end;
3n
2
Contm o mximo
Contm o mnimo
23 , para n > 0.
i := i + 2;
25
Logo f (n) = n 1 +
26
27
3n
2
2, para n > 0,
28
f (n)
algoritmos
Melhor caso
Pior caso
Caso mdio
MaxMin1
2(n 1)
2(n 1)
2(n 1)
MaxMin2
n1
2(n 1)
3n/2 3/2
MaxMin3
3n/2 2
3n/2 2
3n/2 2
29
Os trs
Para derivar o limite inferior, o orculo procura sempre fazer com que o
algoritmo trabalhe o mximo, escolhendo como resultado da prxima
comparao aquele que cause o maior trabalho possvel necessrio
para determinar a resposta final.
30
(a 1, b + 1, c, d) ou (a 1, b, c + 1, d) ou (a 1, b, c, d + 1) se a 1
(um elemento de a comparado com um de b ou um de c)
(a, b 1, c, d + 1) se b 2 (dois elementos de b so comparados)
31
32
33
comparaes. 2
O teorema nos diz que se o nmero de comparaes entre os
elementos de um vetor for utilizado como medida de custo, ento o
algoritmo MaxMin3 timo.
34
35
Notao O
Dominao assinttica
A anlise de um algoritmo geralmente conta com apenas algumas
operaes elementares.
g(n)
36
Exemplos de Notao O
37
Exemplos de Notao O
38
39
Notao
c = constante
Suponha trs trechos cujos tempos so O(n), O(n2 ) e O(n log n).
g(n)
c f (n)
O tempo dos trs trechos ento O(max(n2 , n log n)), que O(n2 ).
40
Notao
41
Exemplo de Notao
f,g
c2 f ( n )
2
n
c2 .
g(n)
c1 f ( n )
1
3
42
Notao o
43
Notao
g(n)
f (n)
n2
2
= (n), mas
n2
2
6= (n2 ).
g(n)
f (n)
= , se o limite existir.
44
Comparao de Programas
Um programa com tempo O(n) melhor que outro com tempo O(n2 ).
Porm, as constantes de proporcionalidade podem alterar esta considerao.
Para n < 50, o programa com tempo 2n2 melhor do que o que possi
tempo 100n.
46
45
47
48
49
f (n) = O(2n ).
f (n) = O(n2 ).
f (n) = O(n!).
f (n) = O(n3 ).
50
Funo
Tamanho n
de custo
10
20
30
40
50
60
0,00001
s
0,00002
s
0,00003
s
0,00004
s
0,00005
s
0,00006
s
n2
0,0001
s
0,0004
s
0,0009
s
0,0016
s
0,0.35
s
0,0036
s
0,001
s
0,008
s
0,027
s
0,64
s
0,125
s
0.316
s
n5
0,1
s
3,2
s
24,3
s
1,7
min
5,2
min
13
min
2n
0,001
s
1
s
17,9
min
12,7
dias
35,7
anos
366
sc.
3n
0,059
s
58
min
6,5
anos
3855
sc.
108
sc.
1013
sc.
n3
51
Funo de
Computador
Computador
Computador
custo
atual
100 vezes
1.000 vezes
mais rpido
mais rpido
de tempo
n
t1
100 t1
1000 t1
n2
t2
10 t2
31, 6 t2
t3
4, 6 t3
10 t3
2n
t4
t4 + 6, 6
t4 + 10
52
54
5 c3 3
c2
c1
9
c4
53
55
56
manipulao de somas,
produtos,
permutaes,
fatoriais,
coeficientes binomiais,
58
Procedimento no Recursivo
Anel Interno
Contm um comando de deciso, com um comando apenas de
atribuio. Ambos levam tempo constante para serem executados.
begin
(1)
for i := 1 to n1 do
begin
(2)
min : = i ;
(3)
for j := i +1 to n do
(4)
i f A[ j ] < A[min]
(5)
then min : = j ;
{ troca A[min ] e A[ i ] }
(6)
x : = A[min ] ;
(7)
A[min] : = A[ i ] ;
(8)
A[ i ] : = x ;
end;
end;
57
var
59
60
Procedimento Recursivo
Pesquisa(n) ;
(1) i f n 1
(4)
Pesquisa(n/ 3 ) ;
(3)
end;
61
62
63
64
i=0 (1/3)
=n
1
1 31
3n
Px1
n
i=0 3i
+ T ( 3nx ) = n
Px1
i=0 (1/3)
+1=
65
n(1( 31 )x )
(1 31 )
+1=
3n
2
21
66
cabealho do programa
label
const
definio de constantes
type
var
declarao de variveis
procedure
ou function
declarao de subprogramas
begin
..
.
end
Tipos em Pascal
Regra geral: tornar explcito o tipo associado quando se declara uma
constante, varivel ou funo.
Isso permite testes de consistncia durante o tempo de compilao.
A definio de tipos permite ao programador alterar o nome de tipos
existentes e criar um nmero ilimitado de outros tipos.
No caso do Pascal, os tipos podem ser:
simples,
estruturados e
comandos do programa
apontadores.
67
68
var a : ano;
var b : letra;
c := rosa;
Tipos Estruturados
Definem uma coleo de valores simples, ou um agregado de valores
de tipos diferentes.
Existem quatro tipos estruturados primitivos:
69
70
71
72
Declarada a varivel
var p: pessoa;
valores particulares podem ser atribudos:
:
:
:
:
var ci : conjint;
var cc : array [1..5] of conjcor;
var ch: conjchar;
p.sobrenome
:= Ziviani;
p.primeironome := Patricia;
p.aniversrio.dia := 21;
p.aniversrio.ms := 10;
p.sexo
:= f;
alfa;
alfa;
data;
(m, f);
Declaradas as variveis
73
type data
74
:= [1,4,9];
:= [vermelho..rosa];
:= [ ];
:= [azul, rosa];
[4]
[1..6]
[1,3,5]
true
75
76
: TipoAlfa ;
PrimeiroNome : TipoAlfa ;
Aniversario : TipoData;
Sexo
: (mas,fem) ;
end;
var Velho , Novo: f i l e of TipoPessoa;
Registro
77
const N = 30;
TipoData = record dia : 1 . . 3 1 ; mes: 1 . . 1 2 ; end;
: TipoPessoa;
begin
reset ( Velho ) ;
rewrite (Novo) ;
78
Separador de Comandos
Exemplo:
if a = 0 then;
a := a + 1;
50
100
...
200
nil
79
80
program Teste;
var a, b : integer ;
procedure SomaUm ( x : integer ; var y : integer ) ;
begin
x : = x + 1;
y : = y + 1;
Resultado da execuo:
Procedimento SomaUm : 1 1
Programa principal
:0 1
81