Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.icmc.usp.br/~sce182/lmatimp.html
ndice > Lista > Matriz Esparsa e Lista Cruzada > Implementao
Instituto de Cincias Matemticas de So Carlos Departamento de Computao e Estatstica SCE182 - Algoritmos e Estruturas de Dados 1 Profs. Resp.: Graa Pimentel, Maria Cristina e Rosane Implementao
Definio da ED
Type Preg = ^Reg; Lista = Preg; Reg = record linha: 1..nl; coluna: 1..nc; valor: TipoElemento; PL,PC: Preg; { pont p/ prox registro } end; vetorCol = array[1..nl] of Lista; vetorLin = array[1..nc] of Lista; var L: vetorLin; C: vetorCol;
1) Acesso ao primeiro elemento no nulo da linha i: L[i] ^ 2) Acesso ao elemento i,j: percorrer a lista L[i] at encontrar registro com campo de coluna = j ou percorrer a lista C[j] at encontrar registro com campo de linha = i
1 de 2
25/2/2008 20:09
Implementao
http://www.icmc.usp.br/~sce182/lmatimp.html
Esse exemplo ilustra que, quando um elemento a(i,j) deve ser eliminado, ele deve ser eliminado, de fato, de duas listas: L[i] e L[j]. O mesmo ocorre quando um elemento deve ser inserido. No algoritmo abaixo, essas operaes so feitas por operaes inserir e eliminar de matrizes esparsas. Algoritmo: Somar k aos elementos da coluna j
Procedure Soma_col (Var L:vetorLin; Var C:vetorCol; col,lin,j: INTEGER, k: TipoElemento); Var p: Lista; begin p := C[j]; for i := 1 to lin do if p = nil then inserir(i,j,k,L,C,col,lin) else begin if p^.linha <> i then { valor era nulo} inserir(i,j,k,L,C,col,lin) {insere antes de p} else begin p^.valor := p^.valor + k; if p^.valor = 0 then begin p := p^.pl; eliminar(i,j,L,C,col,lin); end else p := p^.pl; end; end; end; -> Fazer os algoritmos de inserir e eliminar -> Re-fazer a definio do tipo para Matrizes esparsas de forma que ele fique adequado para uma implementao de um TAD Matrizes esparsas. Sugesto: adicionar a defino. um registro que armazene o vetor de linhas, o vetor de colunas (L e C), o nmero atual de linhas da matriz, e o nmero atual de colunas da matriz. Re-fazer inserir, eliminar, e Soma_col diante das novas modificaes no tipo. -> Extrair um TAD Matrizes esparsas. No esquecer de definir operaes para inicializar o TAD, definindo nmero de linhas e colunas para a matriz.
Avaliao de desempenho
Matriz Esparsa
2 de 2
25/2/2008 20:09