MATRIZES ESPARSAS
PAULO CÉSAR BARBOSA FERNANDES – 2011/1
ARMAZENAMENTO DE MATRIZES ESPARSAS
AGENDA
• Introdução
• Objetivo
• Tipos de armazenamento
• Índice• Linha• Coluna
• Comparação entre as abordagens
• Estudo de caso
• Conclusão
INTRODUÇÃO
• Uma matriz é dita esparsa quando a maioria de seus elementos são iguais a zero. Por exemplo:
• Muito espaço em memória seria economizado se apenas os elementos não nulos fossem armazenados.
INTRODUÇÃO
•42 posições na matriz;
•7 posições com valor diferente de zero;
•Supondo 4 bytes para cada posição, temos: 42 * 4 = 168 bytes 7 * 4 = 28 bytes Uma economia de 83%
INTRODUÇÃO
• A elaboração de uma representação para matrizes esparsas deve levar em consideração:
Facilidade de acesso tanto para linhas como para colunas (preservar a natureza bidimensional da matriz).
Eficiência nas operações (soma, multiplicação, etc.)
OBJETIVO
• Diminuir a quantidade de memória necessária para armazenar as informações;
10 0 2 3 5 0 2 0 6 0 5 0 0 2 5 6
0 2 6 0 1 0 3 0 0 2 0 0 0 5 0 8
1 0 2 0 0 3 0 0 5 0 5 0 6 0 7 0
10 2 3 5 2 6 5 2 5 6 2 6 1 3 2 5
8 1 2 3 5 5 6 7
Armazenando valores zero:
Não armazenando valores zero:
ARMAZENAMENTO POR ÍNDICE
STOREGE-BY-INDICES
A 11 13 21 22 24 32 33 36 43 44 45 61 62 65 66
I 1 1 2 2 2 3 3 3 4 4 4 6 6 6 6
J 1 3 1 2 4 2 3 5 3 4 5 1 2 5 6
A 11 13 21 22 24 32 33 36 43 44 45 61 62 65 66
I 1 1 2 2 2 3 3 3 4 4 4 6 6 6 6
J 1 3 1 2 4 2 3 5 3 4 5 1 2 5 6
STOREGE-BY-INDICES
Espaço necessário:3 x Elementos não nulos
Elementos matriz: 36Elementos não nulos: 15Para armazenamento: 45
ARMAZENAMENTO POR LINHA
STOREGE-BY-ROWS
AR 11 13 21 22 24 32 33 43 44 46 61 62 66
IA
JA
AR 11 13 21 22 24 32 33 43 44 46 61 62 66
IA 1 3 6 8 11 11 14
JA
STOREGE-BY-ROWS
Primeiro índice de cada linha
AR 11 13 21 22 24 32 33 43 44 46 61 62 66
IA 1 3 6 8 11 11 14
JA 1 3 1 2 4 2 3 3 4 6 1 2 6
STOREGE-BY-ROWS
Índice do elemento na coluna
Espaço necessário:2 x Elementos não nulos + Nº Linhas + 1
Elementos matriz: 36Elementos não nulos: 13Para armazenamento: 33
STOREGE-BY-ROWS
AR 11 13 21 22 24 32 33 43 44 46 61 62 66
IA 1 3 6 8 11 11 14
JA 1 3 1 2 4 2 3 3 4 6 1 2 6
(4,3)
ARMAZENAMENTO POR COLUNA
STOREGE-BY-COLUMNS
AR 11 21 61 22 32 62 13 33 43 24 44 46 66
IA
JA
Armazenando coluna por coluna
STOREGE-BY-COLUMNS
AR 11 21 61 22 32 62 13 33 43 24 44 46 66
IA 1 2 6 2 3 6 1 3 4 2 4 4 6
JA
Preenchendo índice da linha de cada elemento
STOREGE-BY-COLUMNS
AR 11 21 61 22 32 62 13 33 43 24 44 46 66
IA 1 2 6 2 3 6 1 3 4 2 4 4 6
JA 1 4 7 10 12 12 14
Primeiro índice de cada coluna
STOREGE-BY-COLUMNS
AR 11 21 61 22 32 62 13 33 43 24 44 46 66
IA 1 2 6 2 3 6 1 3 4 2 4 4 6
JA 1 4 7 10 12 12 14
(4,3) Espaço necessário:2 x Elementos não nulos + Nº Colunas + 1
Elementos matriz: 36Elementos não nulos: 13Para armazenamento: 33
COMPARANDO
Linhas Colunas Qtd Redução
6 6 36,00 50,00 18,00 43,00 19,44-
100 200 20.000,00 50,00 10.000,00 20.101,00 0,50-
20000 1000 20.000.000,00 50,00 10.000.000,00 20.020.001,00 0,10-
20000 13000 260.000.000,00 50,00 130.000.000,00 260.020.001,00 0,01-
Qtd Redução
43,00 19,44-
20.201,00 1,01-
20.001.001,00 0,01-
260.013.001,00 0,01-
Qtd Redução
54,00 50,00-
30.000,00 50,00-
30.000.000,00 50,00-
390.000.000,00 50,00-
Linha
Indice
Coluna
Tipo Armazenamento
Dimensão Matriz Quantidade
Posições
Percentual
posições nulas
Quantidadede
posições não nulas
Com 50 % de posições nulasCom 50 % de posições nulas
COMPARANDO
Linhas Colunas Qtd Redução
6 6 36,00 65,00 12,60 32,20 10,56
100 200 20.000,00 65,00 7.000,00 14.101,00 29,50
20000 1000 20.000.000,00 65,00 7.000.000,00 14.020.001,00 29,90
20000 13000 260.000.000,00 65,00 91.000.000,00 182.020.001,00 29,99
Qtd Redução
32,20 10,56
14.201,00 29,00
14.001.001,00 29,99
182.013.001,00 29,99
Qtd Redução
37,80 5,00-
21.000,00 5,00-
21.000.000,00 5,00-
273.000.000,00 5,00-
Linha
Indice
Coluna
Tipo Armazenamento
Dimensão Matriz Quantidade
Posições
Percentual
posições nulas
Quantidadede
posições não nulas
Com 65 % de posições nulasCom 65 % de posições nulas
COMPARANDO
Linhas Colunas Qtd Redução
6 6 36,00 70,00 10,80 28,60 20,56
100 200 20.000,00 70,00 6.000,00 12.101,00 39,50
20000 1000 20.000.000,00 70,00 6.000.000,00 12.020.001,00 39,90
20000 13000 260.000.000,00 70,00 78.000.000,00 156.020.001,00 39,99
Qtd Redução
28,60 20,56
12.201,00 39,00
12.001.001,00 39,99
156.013.001,00 39,99
Qtd Redução
32,40 10,00
18.000,00 10,00
18.000.000,00 10,00
234.000.000,00 10,00
Linha
Indice
Coluna
Dimensão Matriz Quantidade
Posições
Percentual
posições nulas
Quantidadede
posições não nulas
Com 70 % de posições nulasCom 70 % de posições nulas
ESTUDO DE CASO
• Um sistema de informação que possa auxiliar um profissional médico na classificação da doença do paciente;
Como é feito essa classificação ?
• Através do CID (Classificação Internacional de Doenças);
• A grande maioria dos diagnósticos médicos pode ser encontrado e associado a um código;
• O código vale para qualquer país;
• O médico vendo o código já sabe qual é a doença;
O REGISTRO ELETRÔNICO
• O profissional faz o diagnóstico do paciente em seu prontuário;
MODELO VETORIAL
Matriz esparsa
O CALCULO
• Cosseno(d1,q) = 0,71
• Cosseno(d2,q) = 0
• Cosseno(d3,q) = 0,63
O PROBLEMA...
• Mais de 30.000 diagnósticos;
• Mais de 20.000 palavras;
• Sendo mais de 13.000 CID;
Uma matriz :
20.000 X 13.000 = 260.000.000
double (8 bytes)
Necessário 1.983,64 MB
Com redução de 40 % - 1.190,18 MB
70 % dos elementos nulos
DEMONSTRAÇÃO
• 16.823.105 x 8 bytes = 128,35 MB
• 128,35 MB – 69,9 % = 38,63 MB
Tipo ArmazenamentoDimensão
MatrizQuantidade
Posições
Percentual posições
nulas
Quantidadede posições não
nulas
Linha
LinhasColuna
s Qtd Redução
19909 845 16.823.105,00
85,00
2.523.465,75
5.066.841,50 69,88
ColunaQtd Redução
5.047.777,50 69,99
DEMONSTRAÇÃO
DEMONSTRAÇÃO
CONCLUSÃO
• Nem sempre é vantagem utilizar matrizes esparsas;
• Quando utilizado adequadamente o ganho pode ser muito vantajoso;
• Devemos observar na nova forma de armazenamento, que:
Diminuímos o espaço necessário para armazenar; Aumentamos o custo computacional;