MATRIZES ESPARSAS
A R M A Z E N A ME N T O D E M A T R I Z E S E S P A R S A S
PAULO CÉSAR BARBOSA FERNANDES – 2011/1
[email protected]
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;
 Armazenando valores zero: 48 posições ocupadas
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
3
2
5
 Não armazenando valores zero: 24 posições ocupadas
10
2
3
5
2
6
5
2
8
1
2
3
5
5
6
7
5
6
2
6
1
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
STOREGE-BY-INDICES
 Espaço necessário:
3 x Elementos não nulos
𝟏𝟏 𝟎 𝟏𝟑 𝟎
𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟑𝟔
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎
𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟔𝟓
Elementos matriz: 36
Elementos não nulos: 15
Para armazenamento: 45
𝟎
𝟎
𝟎
𝟒𝟓
𝟎
𝟔𝟔
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
ARMAZENAMENTO POR LINHA
STOREGE-BY-ROWS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Armazenando linha por linha
AR
IA
JA
11
13
21
22
24
32
33
43
44
46
61
62
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
66
STOREGE-BY-ROWS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Primeiro índice de cada linha
AR
11
13
21
22
24
32
33
IA
1
3
6
8
11
11
14
JA
43
44
46
61
62
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
66
STOREGE-BY-ROWS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Índice do elemento na coluna
AR
11
13
21
22
24
32
33
IA
1
3
6
8
11
11
14
JA
1
3
1
2
4
2
3
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
43
44
46
61
62
66
3
4
6
1
2
6
STOREGE-BY-ROWS
(4,3)
 Espaço necessário:
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
2 x Elementos não nulos + Nº Linhas + 1
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
Elementos matriz: 36
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
Elementos não nulos: 13
𝟎
𝟎
𝟎
𝟎 𝟎
Para armazenamento: 33
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
AR
11
13
21
22
24
32
33
IA
1
3
6
8
11
11
14
JA
1
3
1
2
4
2
3
43
44
46
61
62
66
3
4
6
1
2
6
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
ARMAZENAMENTO POR COLUNA
STOREGE-BY-COLUMNS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Armazenando coluna por coluna
AR
IA
JA
11
21
61
22
32
62
13
33
43
24
44
46
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
66
STOREGE-BY-COLUMNS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Preenchendo índice da linha
de cada elemento
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
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
STOREGE-BY-COLUMNS
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
 Primeiro índice de cada coluna
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
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
STOREGE-BY-COLUMNS
(4,3)
 Espaço necessário:
2 x Elementos não nulos + Nº Colunas + 1
Elementos matriz: 36
Elementos não nulos: 13
Para armazenamento: 33
𝟏𝟏 𝟎 𝟏𝟑 𝟎 𝟎
𝟐𝟏 𝟐𝟐 𝟎 𝟐𝟒 𝟎
𝟎 𝟑𝟐 𝟑𝟑 𝟎 𝟎
𝟎
𝟎 𝟒𝟑 𝟒𝟒 𝟎
𝟎
𝟎
𝟎
𝟎 𝟎
𝟔𝟏 𝟔𝟐 𝟎
𝟎 𝟎
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
𝟎
𝟎
𝟎
𝟒𝟔
𝟎
𝟔𝟔
COMPARANDO
Tipo Armazenamento
Dimensão Matriz
Quantidade
Linhas Colunas
Posições
6
6
100
Percentual
Quantidadede
posições nulas posições não nulas
Linha
Qtd
Redução
36,00
50,00
18,00
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
43,00 - 19,44
Coluna
Qtd
Redução
43,00 - 19,44
Com 50 % de posições nulas
20.201,00
-
1,01
20.001.001,00
-
0,01
260.013.001,00
-
0,01
Indice
Qtd
Redução
54,00 - 50,00
30.000,00 - 50,00
30.000.000,00 - 50,00
390.000.000,00 - 50,00
COMPARANDO
Tipo Armazenamento
Dimensão Matriz
Quantidade
Linhas Colunas
Posições
6
6
100
Percentual
Quantidadede
posições nulas posições não nulas
Linha
Qtd
Redução
36,00
65,00
12,60
32,20
10,56
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
Coluna
Qtd
Com 65 % de posições nulas
Redução
32,20
10,56
14.201,00
29,00
14.001.001,00
29,99
182.013.001,00
29,99
Indice
Qtd
Redução
37,80
-
5,00
21.000,00
-
5,00
21.000.000,00
-
5,00
273.000.000,00
-
5,00
COMPARANDO
Dimensão Matriz
Linhas
Colunas
6
6
100
Quantidade
Posições
Percentual
Quantidadede
posições nulas posições não nulas
Linha
Qtd
Redução
36,00
70,00
10,80
28,60
20,56
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
Coluna
Qtd
Com 70 % de posições nulas
Redução
28,60
20,56
12.201,00
39,00
12.001.001,00
39,99
156.013.001,00
39,99
Indice
Qtd
Redução
32,40
10,00
18.000,00
10,00
18.000.000,00
10,00
234.000.000,00
10,00
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;
EXEMPLO ATESTADO
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
Tipo Armazenamento
Dimensão Matriz
Linhas
Colunas
19909
845
Quantidade
Posições
16.823.105,00
Percentual
Quantidadede
posições nulas posições não nulas
85,00
2.523.465,75
Linha
Qtd
Redução
5.066.841,50
69,88
Coluna
Qtd
5.047.777,50
• 16.823.105 x 8 bytes = 128,35 MB
• 128,35 MB – 69,9 % = 38,63 MB
Redução
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;
OBRIGADO !!!
Paulo César Barbosa Fernandes – [email protected]
DÚVIDAS
Download

Armazenamento de Matrizes Esparsas