¿Qué es una matriz?
- Una matriz es una colección de elementos, cada uno identificado por un índice o clave.
- Las matrices tienen un tamaño fijo y dinámico
- Elementos homogéneos → todos los elementos de una matriz son del mismo tipo de datos.
- Elementos heterogéneos → que permiten diferentes tipos de datos en el mismo array.
// Homogeneous
int[] intArray = new int[5]; // Array of integers String[]
stringArray = new String[5]; // Array of strings
// Heterogeneous
mixedArray = [1, "hello", 3.14, True] # Mixed data types in one list
Características de las matrices
- Indexación: indexación de base cero en la mayoría de los lenguajes de programación.
- Tamaño: tamaño fijo (estático), no se puede cambiar dinámicamente (excepto en idiomas con matrices dinámicas).
- Asignación de memoria: asignación de memoria contigua para elementos de la matriz. lo que significa que cada elemento está directamente al lado del anterior en la memoria. Esto es posible porque todos los elementos son del mismo tamaño, lo que permite al sistema calcular la dirección de memoria de cualquier elemento utilizando su índice.

Operaciones de matriz
- Inserción: normalmente implica el cambio de elementos, complejidad temporal O(n).
- Eliminación: similar a la inserción, es posible que sea necesario desplazar elementos. Excepto el último índice
- Recorrido: iteración a través de todos los elementos, complejidad temporal O(n).
- Tiempo de acceso: O(1) complejidad temporal para acceder a un elemento utilizando su índice.
Tipos de matrices
- Matriz unidimensional: forma más simple, como una lista.
- Matriz multidimensional: matrices de matrices (por ejemplo, matriz 2D).
- Matriz irregular: matrices con diferentes longitudes de submatrices.
- Matrices dinámicas (por ejemplo, ArrayList en Java): matrices que pueden crecer en tamaño dinámicamente.
Ventajas de las matrices
- Eficiencia: O(1) tiempo de acceso a elementos.
- Utilización de la memoria: uso eficiente de la memoria debido al almacenamiento contiguo.
- Facilidad de uso: simplifica la gestión de datos y operaciones como ordenar y buscar
Desventajas de las matrices
- Tamaño fijo: No se puede cambiar el tamaño una vez declarado. excepto matriz dinámica
- Costo de inserción/eliminación: O(n) para insertar o eliminar un elemento, especialmente en el medio.
- Desperdicio de memoria: los elementos no utilizados aún ocupan espacio.
Aplicaciones de matrices en el mundo real
- Almacenamiento de datos: Común en programación para almacenar colecciones de elementos.
- Algoritmos de clasificación: muchos algoritmos de clasificación están diseñados para matrices (por ejemplo, QuickSort, MergeSort).
- Operaciones matriciales: las matrices 2D se utilizan para operaciones matriciales en matemáticas y gráficos.
- Implementación de pilas y colas: las estructuras de datos básicas se pueden implementar mediante matrices.
Mejores prácticas con matrices
- Evite copias innecesarias: tenga en cuenta las operaciones que requieren copiar elementos.
- Utilice matrices dinámicas cuando sea necesario: si el tamaño es incierto, prefiera las matrices dinámicas.
- Aproveche las funciones integradas: utilice funciones específicas del idioma para operaciones de matrices.
- Comprobación de límites: compruebe siempre las condiciones de los límites para evitar IndexOutOfBoundsException.
Ejemplo de matriz estática y dinámica en GO
package main
import (
"fmt"
"unsafe"
)
func main() {
// Static Array
var staticArr [5]int64
staticArr[0] = 1
staticArr[1] = 2
staticArr[2] = 3
staticArr[3] = 4
staticArr[4] = 5
elementSize := unsafe.Sizeof(staticArr[0])
totalSize := elementSize * uintptr(len(staticArr))
fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
fmt.Println()
// Dynamic Array (Slice)
dynamicArr := make([]int32, 0, 5)
before := unsafe.Sizeof(dynamicArr[0])
beforeTotal := before * uintptr(len(dynamicArr))
fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)
// Append elements to dynamic array
for i := 0; i