Você está na página 1de 11

Métodos de representação de matrizes esparsas

Marta de Fátima Severiano Oliveira


April 2022

1 Matrizes Esparsas
Em suma, uma matriz esparsa é aquela que tem uma quantidade considerável de suas entradas iguais a
zero. Podem ser classificadas como estruturadas ou não estruturadas. Uma matriz esparsa estruturada
geralmente possui um padrão regular apresentado, em muitos casos, ao longo de um número pequenos
de diagonais.
Os métodos que serão utilizados estão listados abaixo.

• Método 01: Representação por grafos;


• Método 02: Permutações e a reordenação de Cuthill-McKee;
• Método 03: O método do mı́nimo grau;

• Método 04: Estrutura de dados;


• Método 05: Fatoração LU;

2 Representação por grafos


Um grafo G(V, E) é definido por dois conjuntos, o conjunto de vértices V = {v1 , v2 , . . . , vn } e o
conjunto de arestas E ⊂ V × V . Seymour Parter foi o matemático que identificou a teoria aqui citada
como sendo eficiente para modelar a eliminação gaussiana. Além disso, tal técnica tornou-se útil para
representar matrizes esparsas e também matrizes simétricas, não-simétricas, entre outras. Abaixo, são
listados alguns conceitos de matrizes:

• Grau do vértice: número de arestas que saem ou entram no vértice.


• Vértices adjacentes: chamamos dois vértices de adjacentes quando existe uma aresta que liga um
ao outro.
• Um caminho é uma sequência de arestas disjuntas.
• Ciclo: caminho com mesmo vértice inicial e final.

Uma matriz simétrica (isto é, quando é quadrada e aij = aji ) An×n pode ser modelada como um
grafo G(V, E) de n vértices. Neste caso, sempre consideramos que a diagonal α = (a11 , . . . , ann ) não
tem nenhum elemento nulo e tomaremos como arestas os pares eij = (i, j) quando aij ̸= 0.
Em 1, em sua primeira linha, a11 ̸= 0 e a12 ̸= 0, logo o vértice 1 está conectado ao vértice 2; de
modo análogo na terceira lina a32 ̸= 0, a33 ̸= 0 e a34 ̸= 0, logo existirá uma aresta entre os vértices 3
e 2 e entre os vértices 3 e 4.

3 Permutações e relação com grafos de adjacência


Apresentaremos métodos de permutação de matrizes e que se mostram eficazes como técnicas paralelas
para representação de matrizes esparsas. Usaremos, então, esse artifı́cio para, em seguida, reutilizarmos
a ferramenta de representação por grafos de adjacência.

1
Figura 1: Figura retirada de [1].

3.1 Permutações
Definição 3.1 Seja A uma matriz e π = {i1 , i2 , . . . , in } uma permutação do conjunto {1, 2, . . . , n}.
Então as matrizes

Aπ,∗ = {aπ(i),j }i=1,...,n;i=1,...,n;j=1,...,m ,

A∗,π = {ai,π }i=1,...,n;j=1,...,m .

Exemplo 3.2 Considere o sistema linear Ax = b, onde

 
a11 0 a13 0
 0 a22 a23 a24 
A=
 a31
,
a32 a33 0 
0 a42 0 a44
e π = {1, 3, 4, 2}, então sistema linear permutado (pela coluna) é:
    
a11 a13 0 0 x1 b1
 0 a23 a22 a24   x 3   b2 
  = 
 a31 a32 a33 0   x 2   b3 
0 a42 0 a44 x4 b4
Note que apenas as incógnitas foram permutadas e que, portanto, o lado direito da equação não
mudou.

3.2 Relações com grafos de adjacência


No prisma da teoria dos grafos podemos interpretar uma permutação simétrica como ”renomeação”dos
vértices de modo que as arestas não sejam alteradas. Em ?? temos essa ideia ilustrada.

Exemplo 3.3 Considere 2. Lá temos uma matriz e sua representação por grafos de adjacência.
Tomando a troca de variáveis x′i −→ x10−i , obtemos a matriz e o grafo de adjacência ilustradas em ??

3.3 O método de Cholesky


Usaremos como motivação para a reordenação de matrizes esparsas a decomposição de Cholesky. Em
suma, para um sistema Ax = b com A ∈ Rn×n , onde A é uma matriz simétrica e definida positiva. É
conhecido que

A = LLT ,
com L sendo uma matriz triangular. O algoritmo é apresentado em 4.

2
Figura 2: Matriz original e sua representação por grafos de adjacência. Retirado de [1].

Figura 3: Matriz e grafo obtidos pela técnica da permutação. Retirado de [1].

Figura 4: Algoritmo de Cholesky. Retirado de [3].

3
Exemplo 3.4 Consideremos o seguinte sistema Ax = b:
    
4 1 2 0, 5 2 x1 7
 1 0, 5 0 0 0   x2   3 
    
 2 0 3 0 0  x3 = 7 
    
 0, 5 0 0 0, 625 0   x4   −4 
2 0 0 0 16 x5 −4
Usando o método descrito em 4, obterı́amos a matriz triangular L abaixo:
 
2 0 0 0 0
 0, 5 0, 5 0 0 0 
 
L= 1 −1 1 0 0 
 0, 25 −0, 25 −0, 5 0, 5 0 
1 −1 −2 −3 1
Observe que a matriz decomposta, L, sofreu um preenchimento, ou seja, possui elementos não
nulos em posições onde não haviam zeros em A. Desta forma, torna-se viável considerar uma matriz
permutada A′ . Neste caso, mais especificamente A′ = P A, onde
 
0 0 0 0 1
 0 0 0 1 0 
 
P =  0 0 1 0 0 

 0 1 0 0 0 
1 0 0 0 0
ou pode ser obtida tomando a regra x′i −→ x6−i . Tais reordenações de variáveis e equações equivalem
a uma permutação de linhas e colunas de A, a qual também é aplicada a x e a b. Tomando b′ = P b,
obtemos um novo sistema linear A′ x′ = b′ . Usando o método de Cholesky a este novo sistema, teremos
como retorno a seguinte matriz:
 
4 0 0 0 0
 0, 5 0, 791 0 0 0 

 
L = 0 0 1, 73 0 0 

 0 0 0 0, 707 0 
0, 5 0, 632 1, 15 1, 41 1, 29

A solução a ser encontrada x′ é simplesmente uma solução rearranjada de x. É preciso mudar


a ordem dos elementos da solução obtida conforme a matriz da permutação para se chegar à solução
x. É importante destacar que a reordenação das equações e variáveis produziu uma L′ tão esparsa
quanto A. O método de Cuthill-McKee, abaixo, é um dos métodos que leva a uma grande redução no
preenchimento, reduzindo o custo de execução e armazenamento.

3.4 Reordenação de Cuthill-McKee


Na ordenação de Cuthill-Mckee os vértices adjacentes a um vértice visitado são sempre percorridos do
grau mais baixo para o grau mais alto. O objetivo principal de tal técnica é reduzir a largura de banda
de uma matriz simétrica. Uma largura de banda β de uma matriz A é dada pela maior distância de
uma entrada não nula à diagonal principal, isto é

β(A) = maxaij ̸=0 |i − j|.


Feito isto, tomemos posse de mais duas definições acerca de grafos:

• Grafo conexo: possui um caminho entre qualquer par de vértices;


• Grafo desconexo: existe um par de vértice para qual não existe um caminho entre eles;
• Clique (ou subgrafo completo): cada vértice do subgrafo possui aresta incidente em todos os
outros vértices do subgrafo;

4
Figura 5: Técnica RCM (reverse Cuthill-McKee) para a parte principal do citado algoritmo. Retirada
de [3].

Figura 6: Algoritmo retirado de [3].

Se tivermos um grafo conexo em nosso problema a redução da banda se resumirá apenas em


renumerar os vértices do grafo de uma maneira que a diferença entre os ı́ndices seja mı́nima. Seja n o
número de vértices (o mesmo que a dimensão de A). Mais uma vez, uma aresta conectará os vértices
i e j quando aij ̸= 0.Definido isto, apresentaremos o seguinte algoritmo:

• Vértice inicial: Determinemos o vértice inicial r, atribuindo seu valor a x1 ;


• Parte principal: Para i = 1, . . . , n, encontremos os vizinhos não numerados do vértice xi ,
numerando-os em ordem crescente do grau;
• Ordenação reversa: Será dada por y1 , . . . , yn , com yi = xn−i+1 para i = 1, . . . , n.

Quando o grafo for desconexo, basta utilizar o algoritmo acima para cada componente conexa do
referido. Em 5 temos uma técnica para a parte principal do algoritmo acima apresentado.

4 O método do mı́nimo grau


O algoritmo mais utilizado para reordenação de matrizes esparsas é o método do mı́nimo grau. A inves-
tigação deste tem como objetivo encontrar uma ordenação para a matriz de forma que ela sofra o menor
preenchimento possı́vel ao ser usada a decomposição de Cholesky (apresentada na seção anterior). Tal
algoritmo é mais eficiente que o Cuthill- McKee reverso (também apresentado anteriormente).
Em uma abordagem mais simples, modelaremos uma matriz simétrica como um grafo não direcio-
nado (o grafo de eliminação G), isto é, em palavras leigas, um grafo cujas as arestas são apenas linhas
e não vetores (como acontece com grafos direcionados). O algoritmo básico é apresentado em 6.

5
Figura 7: Uma matriz esparsa e seu grafo de adjacência. Exemplo retirado de [2].

Note que a cada passo k, o vértice de menor grau é selecionado no grafo de eliminação Gk . Veja
que uma eliminação G(v) é obtida de G a partir da remoção do vértice v e de todas as suas arestas
incidentes e, em seguida, novas arestas são adicionadas, convertendo todos vértices adjacentes a v em
uma clique. A ordenação resultante é uma sequência de vértices v0 , v1 , . . . , excluı́dos pelo algoritmo.
Outras técnicas derivadas do método do mı́nimo grau são, por exemplo, o mı́nimo grau original,
mı́nimo grau múltiplo e mı́nimo grau aproximado. Estes dependem de conceitos como eliminação em
massa, grau, grau externo, eliminação múltipla, conjunto alcançável e absorção de elementos, conceitos
estes que não serão abordados aqui por fugir do nosso escopo.

5 Estrutura de dados
Tomemos, inspirados na seção ”representação por grafos”, o exemplo ilustrado em 7. Iremos definir,
através dele, três tipos de estruturas de dados (usadas, também, para representar grafos) : tabelas de
conexão, lista de adjacências e lista encadeada.

5.1 Tabelas de conexão


Para uma matriz n×n, nossa tabela de conexão terá n linhas e m colunas, onde m = max{grau(vi ), vi ∈
V }. Em 1 temos duas tabelas 6 × 3, uma delas denotando os ı́ndices dos elementos não nulos que são
vizinhos/adjacentes a cada vértice do grafo A e outra com os valores numéricos de tais elementos não
nulos. Note que esse sistema se mostrará ineficiente se houver um número significativo de vértices com
grau muito menor do que m.

Tabela 1: Representação de 7 como tabela de conexão.

Vértices Vizinhos Valores


1 2, 6 a, b
2 1, 3, 4 a, c, d
3 2, 5 c, e
4 2 d
5 3, 6 e, f
6 1, 5 b, f

5.2 Lista de adjacência


Uma lista de adjacência pode ser formada pelos seguintes arranjos. Em 8 temos a lista de adjacência

6
Figura 8: Lista de adjacências de 7. Retirado de [2].

Figura 9: Segmento de código para determinar um vértice k usando lista de adjacências. Retirado de
[2].

• XADJ: Aponta para a posição inicial de cada lista de adjacência; seu comprimento será n + 1,
onde n é o número de arestas. Note que a (n + 1)-ésimo apontador denotará a posição seguinte
à última das listas de adjacências considerada;
• ADJ: Contém as listas de adjacências para todos os vértices do grafo de A de forma ordenada;
terá comprimento 2n;

• VAL: Arranjo paralelo a ADJ contendo os valores numéricos dos elementos de A fora da diagonal.
• DIA: Conterá os elementos diagonais e terá comprimento n;

5.3 Lista encadeada


A ordenação por tabelas de conexão e lista de adjacências exigem que se conheça o grau de cada
vértice considerado. Uma vantagem do nosso novo método, o de lista encadeadas, é a possibilidade de
inserção de elementos não nulos na matriz sem grandes dificuldades. Este novo nos será muito útil no
manuseamento de fatoração LU de matrizes esparsas.
Tomemos a lista de adjacência e seus respectivos valores encontrados na subseção anterior. Defi-
nimos, assim, os seguintes arranjos:

7
Figura 10: Este esquema nos dá um norte de como obter os elementos de ”PRIM”em 11.

Figura 11: Lista encadeada para a matriz/grafo do 7. Note que ”VIZ”e ”VAL”podem ser obtidos de
1. Retirada de [2].

8
Figura 12: Segmento de código que examina os vértices adjacentes de um determinado vértice k a
partir da lista encadeada. Retirado de [2].

6 Fatoração LU
Foquemos nossa atenção no sistema linear Ax = b, onde A é uma matriz n × n invertı́vel (ou seja,
tenha determinante não nulo). Com essas condições, A pode ser fatorada como A = LU , onde L é uma
matriz triangular inferior e U é uma matriz triangular superior unitária (isto é, todos os elementos
diagonais são iguais a 1). No caso de matrizes simétricas e estruturas, os fatores L e U terão elementos
não nulos:

• Nas posições em que A tiver elementos não nulos;


• Quando akj = 0, mas aki × aij ̸= 0, as posições (k, j) de U e (j, k) de L recebem enchimento,
conforme mostrado em 13.

Antes de obtermos os valores numéricos de L e U , passaremos por duas etapas, explicadas abaixo:

• Fatoração simbólica: obteremos as posições dos elementos não nulos de L e U . Neste caso,
usaremos como entrada as listas encadeadas por linha e por coluna da matriz A considerada, a
ordem desta e o número de fatores não nulos em A. De saı́da, obteremos as listas encadeadas de
L e U e o número de elementos não nulos nos fatores triangulares. O algoritmo é mostrado em
14.
• Fatoração numérica: obteremos os valores numéricos dos elementos não nulos de L e U . Aqui
nossa entrada serão as listas encadeadas por linha e por coluna para os fatores triangulares
determinados no passo anterior, além da A considerada. De saı́da, teremos os valores numéricos
de L e U e os elementos da diagonal de A serão sobrescritos pelos elementos diagonais de A. O
algoritmo é mostrado em 15.

7 Bibliografia
[1] Saad, Y. Iterative methods for sparse linear systems.
[2] Costa, Antonio Simões, de Almeida, Katia. Métodos de Ordenação e Armazenamento de Matrizes
Esparsas.
[3] do Carmo, Fernanda Cristina. Análise da Influência de Reordenação de Matrizes Esparsas no De-
sempenho CCCG(η).

9
Figura 13: Ilustração do enchimento na fatoração LU. Retirado de [2].

Figura 14: Algoritmo para fatoração simbólica esparsa. Retirado de [2].

10
Figura 15: Algoritmo para fatoração numérica esparsa. Retirado de [2].

11

Você também pode gostar