De Que Trata Huesos De Lagartija

Huesos de Lagartija (Lizard Bones) es una técnica de diseño de algoritmos utilizada para optimizar el uso de la memoria al resolver problemas con restricciones.
El concepto se basa en la idea de dividir un problema grande en subproblemas más pequeños y manejables, tal como un lagarto puede regenerar partes de su cuerpo, pero en este caso, se "regenera" o reutiliza memoria. Vamos a explicarlo paso a paso:
1. Dividir el Problema: Identifica las partes del problema que pueden resolverse de forma independiente. Por ejemplo, si estás calculando el camino más corto en un grafo grande, puedes dividirlo en subgrafos más pequeños.
Must Read
2. Calcular y Guardar Resultados Parciales: Resuelve cada subproblema y guarda sus resultados en la memoria. Estos resultados son como los "huesos" del lagarto, la estructura básica para la regeneración. Si estás calculando el camino más corto, guarda la distancia mínima entre nodos de cada subgrafo.

3. Reutilizar la Memoria: Una vez que hayas utilizado la memoria para un subproblema, puedes liberarla y usarla para el siguiente. Aquí es donde la analogía de "regeneración" se aplica. Después de calcular el camino más corto en el subgrafo A y guardar los resultados, libera la memoria utilizada por A y utilízala para calcular el camino más corto en el subgrafo B.
4. Combinar Resultados: Combina los resultados parciales de los subproblemas para obtener la solución al problema original. Usando el ejemplo del camino más corto, combina las distancias mínimas de cada subgrafo para encontrar el camino más corto total.

Ejemplo: Imagina que estás resolviendo un problema de programación dinámica con una tabla muy grande. En lugar de mantener toda la tabla en memoria a la vez, puedes calcularla por filas o columnas, guardando solo la fila o columna necesaria para el cálculo siguiente, reutilizando así la memoria.
La importancia de Huesos de Lagartija radica en su capacidad para permitir resolver problemas que, de otra manera, serían intratables debido a limitaciones de memoria. Es especialmente útil en sistemas embebidos o en situaciones donde la memoria es un recurso escaso. Permite ejecutar algoritmos complejos en hardware con limitaciones de recursos.
