Cálculo de la subsecuencia palindrómica más larga mediante programación dinámica
El desafío consiste en encontrar la longitud de la subsecuencia más larga dentro de una cadena s que cumpla con la propiedad de ser un palíndromo. A diferencia de un subsegmento contiguo, una subsecuencia se forma eliminando cero o más caracteres sin alterar el orden relativo de los caracteres restantes.
Por ejemplo, si la entrada es "bbba ...
Publicado el 7-18 20:23
Estrategias Algorítmicas y Resolución de Problemas LeetCode en C++
Algoritmos Greedy (Voraces)
La estrategia voraz o "greedy" implica tomar la mejor decisión local en cada paso con la esperanza de que esta serie de decisiones óptimas a nivel local conduzca a una solución óptima a nivel global.
Problemas de Asignación
455. Asignar Galletas
Explicación: Para satisfacer a la mayor cantidad posible de ni ...
Publicado el 7-11 11:45
Optimización de algoritmos de conteo mediante el patrón de Merge Sort
El algoritmo de ordenamiento por mezcla (Merge Sort) no solo es una herramienta eficiente para organizar datos, sino que su estructura de "dividir y conquistar" permite resolver problemas complejos relacionados con el conteo de pares y rangos. La clave reside en aprovechar el momento en que dos subarreglos ya están ordenados para real ...
Publicado el 7-10 19:23
Fundamentos y Aplicación de Expresiones Regulares en el Desarrollo de Software
Introducción a las Expresiones Regulares
Las expresiones regulares, comúnmente conocidas como Regex, son secuencias de caracteres que conforman un patrón de búsqueda. Su función principal es facilitar la identificación, validación y manipulación de fragmentos de texto dentro de cadenas más complejas. Mediante el uso de una sintaxis estandarizad ...
Publicado el 7-9 06:02
Técnicas de Programación Dinámica: Árbol, Compresión de Estado y Dígitos
Centroide en Árboles
El centroide minimiza la suma de distancias a todos los nodos. Definimos:
dist[i]: Suma de distancias desde nodos en el subárbol con raíz en i
tam[i]: Tamaño del subárbol con raíz en i
Para hojas: dist[i] = 0. Relación recursiva:
void calcular(int nodo, int padre) {
for (int hijo : grafo[nodo]) {
if (hijo == p ...
Publicado el 7-6 05:05
Resolución en C++ del problema USACO P2954 Grazing2 S
Problema de asignación de vacas a puestos de establo: se tienen N vacas (2 ≤ N ≤ 1500) y S puestos (N ≤ S ≤ 1,000,000) en una línea, con distancias unitarias entre puestos adyacentes. Dadas las posiciones iniciales P_i de las vacas, se deben reubicar para que las distancias entre vacas adyacentes difieran en a lo sumo 1 de D = ⌊(S-1)/(N-1)⌋, pr ...
Publicado el 7-3 17:25
Conceptos Esenciales en C: Gestión de Arrays, Punteros y Cadenas
Este artículo explora una variedad de temas fundamentales en la programación en C, centrándose en el manejo eficiente de arrays y punteros, la manipulación de cadenas de caracteres y la implementación de algoritmos básicos. A través de ejemplos de código comentados y explicaciones detalladas, se cubren desde la búsqueda de valores extremos en u ...
Publicado el 7-3 09:07
Fundamentos de Arreglos en C++ y Algoritmos de Búsqueda
Introducción a los Arreglos
Un arreglo es una estructura de datos que permite almacenar una colección de elementos del mismo tipo de forma contigua en la memoria.
Arreglos Unidimensionales
Existen varias formas de declarar arreglos en C++. A continuación, se presentan los métodos comunes:
int main() {
// Definición especificando tamaño
...
Publicado el 7-2 02:13
Guía Completa de Algoritmos de la STL en C++
1. Algoritmos de inspección (no modificadores)
Estos procedimientos analizan el contanido de un contenedor sin alterar los elementos existentes.
1.1 Búsqueda con find y find_if
find: Localiza la primera coincidencia de un valor específico.
find_if: Busca el primer elemento que cumpla con una condición lógica (predicado).
#include <vector&g ...
Publicado el 6-30 18:32
Algoritmos de la STL de C++: Guía Completa con Ejemplos
Estos algoritmos no alteran los elementos del contenedor sobre el que operan.
1.1 find y find_if
find(inicio, fin, valor): devuelve un iterador al primer elemento igual a valor (o fin si no se encuentra).
find_if(inicio, fin, predicado): devuelve el iterador al primer elemento que cumple el predicado.
find_end(inicio, fin, sub_inicio, sub_fin) ...
Publicado el 6-24 18:47