350 likes | 555 Views
Matrizes esparsas. Armazenamento de Matrizes Esparsas. Paulo César Barbosa Fernandes – 2011/1. paulo.cesar@vitoria.es.gov.br. Agenda. Introdução Objetivo Tipos de armazenamento Índice Linha Coluna Comparação entre as abordagens Estudo de caso Conclusão. Introdução.
E N D
Matrizes esparsas Armazenamento de Matrizes Esparsas Paulo César Barbosa Fernandes – 2011/1 paulo.cesar@vitoria.es.gov.br
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 • Não armazenando valores zero: 24 posições ocupadas
Storege-by-indices • Espaço necessário: • 3 x Elementos não nulos • Elementos matriz: 36 • Elementos não nulos: 15 • Para armazenamento: 45
Storege-by-rows • Armazenando linha por linha
Storege-by-rows • Primeiro índice de cada linha
Storege-by-rows • Índice do elemento na coluna
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
Storege-by-columns • Armazenando coluna por coluna
Storege-by-columns • Preenchendo índice da linha de cada elemento
Storege-by-columns • Primeiro índice de cada coluna
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
Comparando Com 50 % de posições nulas
Comparando Com 65 % de posições nulas
Comparando Com 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
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 – paulo.cesar@vitoria.es.gov.br DÚVIDAS