Escolar Documentos
Profissional Documentos
Cultura Documentos
Estrutura de Dados I
Estrutura de Dados I
Instituto Luterano de Ensino Superior de Ji-Paran Curso Bacharelado em Informtica Estrutura de Dados I Prof.: Jos Luiz A. Duizith LINGUAGEM ALGORITMICA Variveis : Toda em maiscula : CONSTANTE Iniciando em Maiscula : Comum Toda em minscula : apontador Se (condio) Ento [ comando Seno [ comando
Atribuio : Condio :
Repetio :
- Enquanto (condio) faa comandos - Repita comandos at (condio) - Para varivel_contadora valor inicial at valor final faa comando
Subprogramas : - Procedimento nome (parmetros) - Funo nome (parmetros) : retorno OBS.: Qualquer varivel utilizada num subprograma que no for parmetro deve ser considerada como varivel local.
Pascal : Type Matriz = Array [1..2, 1..2] of Real; Var M : Matriz ; Algortmo : M ( I, J ) , I = 1..2, J = 1..2
MATRIZ UNIDIMENSIONAL (VETOR) Ex.: Matriz unidimensional de 6 elemetos reais com ndices entre -2 e 3. M(I), I = 2..3 M I Operaes : Alterao : dada uma matriz M, um ndice I e um valor V, o valor de V armazenado na posio M [ I ]. Consulta : dada uma matriz M, e um ndice I, retorna o valor V, armazenado na posio M [ I ].
Operaes Bsicas
elementos ndices
Procedimento Alterao ( M, Ind_Min, Ind_Max, I, V ) { M : Matriz unidimensional c/ ndices entre Ind_Min e Ind_Max I : ndice da posio a ser alterada V : valor a ser armazenado } Se ( Ind_Min <= I <= Ind_Max) Entao M [ I ] V Senao ERRO Funo Consulta (M, Ind_Min, Ind_Max, I) : V Se (Ind_Min <= I <= Ind_Max) Entao V M [ I ] Senao ERRO
Tratamento de Erro 1) Ignorar : em Pascal no teria a condio seno; 2) Terminar a Execuo : em Pascal, no h continuao do programa enquanto o erro no for solucionado; 3) Mensagens de Erro 4) Rotinas de Tratamento de Erro Pascal Var M = Array {-2,+3] of real; x : real Begin M [1] := 7; alterao x := M [2]; consulta, porm a matriz fica do lado direito Algoritmo (aplicao)
Parmetros do procedimento alterao
{ M [1] := 7 } { x := M [2] }
Parmetros da funo consulta
Representao Natural M (I) , I = a1..a2 M : Matriz (representao natural) I : ndice (representao natural) a1 : ndice inicial a2 : ndice final Ex.: M I 7.2 -2 a1 +3.5 -1 0.4 0 -1.0 1 2.3 2 -9.2 3 a2
Representao Linear L(J) L : Matriz (repres. Linear) J : ndice (repres. Linear) b : ndice inicial (base)
Ex.: L J Linearizao Transformao da representao natural em linear. Matriz Unidimensional : L [J] = M [I], onde J = b + I - a1 Ex.: 0 b 1000 1001 1002 1003 1004 1005 640 K 7.2 3.5 0.4 -1.0 2.3 -9.4 7.2 b 3.5 b+1 0.4 b+2 -1.0 b+3 2.3 b+4 -9.2 b+5
-2, -1, 0, 1, 2, 3
Matriz J
MATRIZES BIDIMENSIONAIS Representao Natural M ( I1 , I2 ) , I1 = a1..a2, I2 = b1..b2 M I1 I2 x1 x2 Ex.: M= a1 0 1 a2 2 7 5 2 -2 b1 3 2 9 -1 4 3 8 0 0 -1 6 1 b2 : : : : : Matriz (repres. Natural) ndice da 1 dimenso (linha) ndice da 2 dimenso (coluna) valor inicial valor final
T1 T2
= b2 - b1 + 1
1 +2 + 1
= T1 (a2 - a1 + 1)
2 - 0 +1 n de linha
Representao Linear L (J), J = b..b + T2 - 1 L : matriz (repres. Linear) J : ndice ( repres. Linear) b : ndice inicial (base) L (J) = M ( I1, I2 ) onde: J = b + ( I1 - a1) * T1 + (I2 - b1) J = b + (I1 - a1) * (b2 - b1 + 1) + (I2 - b1) Ex.: Pascal: M = Array [ 0..2, -2..1 ] of integer { M [x,y] } ou M = Array [0..2] of Array [-2..1] of integer { M [x] [y] } [ [ 7 3 4 0 ] [ 5 2 3 -1] [ 2 9 8 6 ] ] Como ficaria armazenado na Ex.: Arquivo (est. Linear) matriz linear um arquivo b 1 2 3 4 5 6 7 8 9 10 11 12 7 3 4 0 5 2 3 -1 2 9 8 6 0 1 2 - - - -2 -1 - - 8 0 +1
Quero obter este n no arquivo. Qual a posio? I1 = 2 (3 linha) I2 = 0 (3 coluna) memria
J = b + (I1 - a1) * (b2 - b1 + 1) + (I2 - b1) J = 1 + (2 - 0) * (1 - (-2) + 1) + (0 - -(2)) J = 1 + (2) * (4) + 2 J=1+8+2 J = 11
Tem que calcular o ndice e recuperar a informao no arquivo. Porque os elementos esto armazenados em 1 arquivo. Aps descoberto o elemento no arquivo, volta a representao natural.
Limites Base { esta funo executada na matriz de representao linear } Se (a1 <= I1 <= a2 ) e ( b1 <= I2 <= b2 ) Entao J b + ( I1 - a1 ) * ( b2 - b1 + 1 ) + ( I2 - b1 ) Posiciona no registro J V(J) Senao ERRO { ndice invlido } Procedimento Alterao ( M, I1, I2 , a1, a2, b1, b2, L, b, V) Se ( a1 <= I1 <= a2 ) e ( b1 <= I2 <= b2 ) Entao J b + ( I1 - a1 ) * ( b2 - b1 + 1 ) + ( I2 - b1 ) L(J)V Senao ERRO { ndice invlido }
L ( J ) = M ( I1, I2, I3 ) , onde : J = b + ( I 1 - a 1 ) * ( b2 - b1 + 1 ) * ( c 2 - c 1 + 1 ) + ( I 2 - b1 ) * ( c 2 - c 1 + 1 ) + ( I 3 - c 1 ) n2 n3 J = b + ( I1 - a1 ) * n2 * n3 + ( I2 - b1 ) * n3 + ( I3 - c1 ) Ex.: Pascal M : Array [ 1..3, 0..1, -1..1 ] of integer M= I1 a1 3 2 a2 1 b1 0 b2 1 I2 81 -9 9 10 0 6 -5 71 5 -11 -14 1 c2 I3 Ex.: Por a matriz tridimensional em uma memria
Estrutura de Dados I Prof. Jos Luiz Andrade Duizith
n3
11 -13 -3 31
-15 2
7 -5 -1 c1
Matriz de n dimenses M ( I1, I2, I3 , ... , Ik ) , I1 = a1..a2, I2 = b1..b2, I3 = c1..c2, Ix = z1..z2 L ( J ) = M (I1, I2, I3 , ... , Ik ) , onde J = b+(I1-a1) * n2 * n3 + ... + nk + (I2-b1) * n3 * n4 * ... * nk ... + (Ik - z1)
MATRIZES ESPECIAIS 1) Matriz Diagonal Supondo M (L,C) seja uma matriz diagonal ento qualquer elemento de coordenadas L <> C nulo. Ex.: M= 1 2 3 -3.5 0 0 1 0 7.4 0 2 0 0 8.3 3 0 0 0 4
Uma matriz diagonal pode ser armazenada em um vetor N (P), onde P o menor valor entre L e C de M.
Ex.: M (45,10)
P = 10, N (10)
Estrutura de Dados I Prof. Jos Luiz Andrade Duizith
Funo Consulta ( M, I1, I2 , a1, a2, b1, b2, N, nulo) : Valor Se ( a1 <= I1 <= a2 ) e ( b1 <= I2 <= b2 ) Entao Se (I1 = I2) {diagonal principal} Entao V N [ I1 ] {pode ser I2, porque eles so iguais} Senao V Nulo Senao ERRO {ndice invlido} Procedimento Alterao ( M, I1, I2 , a1, a2, b1, b2, N, V ) Se ( a1 <= I1 <= a2 ) e ( b1 <= I2 <= b2 ) Entao Se (I1 = I2) Entao N [ I1 ] V {diagonal principal} Senao ERRO
MATRIZES ESPARSAS Uma matriz esparsa pode ser definida sumariamente como sendo aquela que possui a maioria dos valores nulos (em torno de 70%). Outra forma de caracterizar uma matriz esparsa : Seja M (L,C), L linha e C coluna, e K elemento no nulo, se 3 . K < L . C ento M considerada uma matriz esparsa; justificando mtodos de armazenamento mais sofisticados que ofeream economia de espao de armazenamento. a) Caso Unidimensional: Ex.: M ( I ) , I = 4..11 M = [ 2.0 4 Valores ndices 2.0 4 0.0 5 0.0 5 0.7 6 0.7 6 1.0 7 1.0 7 0.0 8 0.0 8 0.0 9 0.0 9 3.5 10 3.5 10 0.0 11 0.0 ] 11
Para poupar espao, armazena-se apenas as informaes dos valores no nulos: Valores 2.0 0.7 1.0 3.5
ndices
10
-1
-1
Posio de folga (usa-se ndices <> da matriz normal). Criou-se p/ poder incluir outros valores neste vetor.
Para permitir que a representao de uma matriz esparsa (em 2 vetores) seja flexvel, adicionam-se posies de folga que so identificados por ndices fora do intervalo normal. b) Caso Bidimensional
Ex: M= 1 2 3 4 5
10 1 10 12 10
1
7 10 3 10 10
2
10 -2 10 10 10
3
10 10 10 10 10
4
10 10 10 10 10
5
10 10 10 10 10
6
5x6 = 30 clulas
1 clula = 1 byte = 30 bytes
Valor
7 1 2
1 2 1
-2 2 3
3 3 2
12 4 1
-1 -1 -1 -1 15 bytes = 15 clulas
Posio de folga
MTODO DA MATRIZ DE BITS Matriz de bits Vetor de valores no nulos Matriz de bits Tem as mesmas dimenses da matriz original, sendo que a posio de 1 valor no nulo na matriz original corresponde a um bit ligado (1) na matriz de bits e um valor nulo (na original) corresponde a um bit desligado (0) na de bits. O vetor armazena os valores no nulos da matriz original na ordem em que os mesmos so localizados se a matriz esparsa fosse lida linha a linha.
Ex: M=
1 2 3
10 1 10
7 10 3
10 -2 10
10 10 10
10 10 10
10 10 10
10
12
1
10
2
10
3
10
4
10
5
10
6
Matriz
de bits
1 2 3 4
0 1 0 1
1
1 0 1 0
2
0 1 0 0
3
0 0 0 0
4
0 0 0 0
5
0 0 0 0
6
-2
12
MATRIZ DE 4 LINHAS Matriz de 4 linhas x K colunas (onde K o n de elementos no nulos) Vetor VL e VC Matriz de 4 linhas (Q) uma matriz de 4 linhas por K colunas, onde K o n de elementos no nulos onde as linhas so: 1 linha : O valor do elemento no nulo (os elementos devem entrar na ordem de linha por linha da matriz esparsa). 2 linha : Coordenada de linha do elemento no nulo 3 linha : Coordenada de coluna do elemento no nulo 4 linha : referncia (elo) a coluna da matriz de 4 linhas que contm a descrio do elemento seguinte na mesma coluna do elemento no-nulo. VL : Vetor utilizado para localizar o incio da descrio de uma linha. VC : Vetor utilizado para localizar o incio da descrio de uma coluna. 1 Matriz 7 1 -2 1 2 2 2 1 3 4 5 1 2 3
1 2 3 4
3 3 2 4
12 4 1 5
Q(4,k) onde K o n de elem. nulos. Esta matriz contm 5 elementos nulos Q(4,5)
4 - na segunda matriz existe 1 outro elemento nulo logo abaixo do elemento 7 ? Sim, o elemento 3. Agora na 1 matriz (1 linha) em que coluna est o elemento 3? Est na 4 coluna, ento coloca o n 4 na 4 linha e 1 coluna da 1 matriz. 2 Matriz 7 1 -2 3
Estrutura de Dados I Prof. Jos Luiz Andrade Duizith
1 2 3
11
12 1 2 1
1
3 2
2
4 5 4
3
VL (4)
5
4
procura na 2 matriz o elemento no nulo e procura a linha em que ele se encontra (se existe na mesma linha vrios elementos, pega s o 1)
VL (6)
1 3 - 2 3 4 5
1 2 coluna
procura na 2 matriz o 1 elemento no nulo, (coluna) aps procura na 1 matriz a coluna em que ele est.