Matrizes

Matrizes

Matrizes representam uma extensão natural dos vetores para duas dimensões, formando estruturas tabulares essenciais para computação numérica e processamento de dados multidimensionais.

Conceitos Fundamentais

  • Estrutura de Armazenamento: Na memória, matrizes são armazenadas em ordem row-major (linhas consecutivas)
  • Dimensões Fixas: Em C, o tamanho deve ser conhecido em tempo de compilação (para alocação estática)
  • Tipos Homogêneos: Todos elementos devem ser do mesmo tipo (int, float, char, etc.)

Representação Matemática vs Implementação

Enquanto na matemática matrizes são representadas como Am×n, em C são declaradas como tipo nome[linhas][colunas], com índices iniciando em 0.

Hierarquia de Acesso

  1. O compilador calcula o deslocamento de memória usando: offset = (i * n_colunas) + j
  2. Cada elemento ocupa sizeof(tipo) bytes consecutivos
  3. O acesso matriz[i][j] é convertido para *(matriz + (i * n_colunas) + j)

Limitações e Considerações

  • Alocação Contígua: Todas linhas são armazenadas sequencialmente na memória
  • Overhead de Cálculo: Acesso a elementos requer cálculo de posição relativa
  • Cache Efficiency: Iterar por linhas (row-major) é mais eficiente que por colunas

Casos Especiais

  • Matrizes Triangulares: Podem ser otimizadas para armazenamento em vetor
  • Matrizes Esparsas: Estruturas alternativas (listas ligadas) são mais eficientes
  • Matrizes Dinâmicas: Requerem ponteiros para ponteiros e alocação individual de linhas