Optimización de Algoritmos con Pilas, Colas Monotónicas y Priority Queues en C++

Evaluación de Expresiones en Notación Polaca Inversa (RPN) La Notación Polaca Inversa es un método de escritura de expresiones matemáticas donde los operadores siguen a sus operandos. Para resolver este problema de manera eficiente, se utiliza una estructura de datos de tipo pila (LIFO). El algoritmo consiste en iterar sobre los elementos: si e ...

Publicado el 9-6 03:41

Entrenamiento de algoritmos del día 19 en 'Code Thinking'|235. Ancestro común más cercano en árbol de búsqueda binaria; 701. Inserción en árbol de búsqueda binaria; 450. Eliminación de nodo en árbol de búsqueda binaria

Encuentra el ancestro común más cercano en un árbol de búsqueda binaria. Anfoque recursivo struct NodoArbol { int valor; NodoArbol* izquierda; NodoArbol* derecha; NodoArbol(int x) : valor(x), izquierda(nullptr), derecha(nullptr) {} }; NodoArbol* encontrarAncestro(NodoArbol* raiz, NodoArbol* nodo1, NodoArbol* nodo2) { if (! ...

Publicado el 9-1 15:00

Recorrido por niveles de un árbol binario mediante búsqueda en anchura

Descripción del problema El recorrido por niveles (Level Order Traversal) consiste en visitar cada nodo de un árbol binario de forma horizontal, procesando todos los nodos de un nivel antes de pasar al siguiente, generalmente de izquierda a derecha. Dado un árbol binario, el objetivo es devolver una estructura de datos que agrupe los valores de ...

Publicado el 8-8 08:58

Implementación y Aplicaciones de Árboles de Prefijos (Trie) en C++

Estructura y Gestión de Memoria Al implementar estructuras de datos como el Trie mediante arreglos estáticos en C++, es fundamental considerar el ámbito de inicialización. Si los arreglos se declaran globalmente (fuera de la clase), se recomienda utilizar memset dentro de la función principal o el cosntructor para limpiar residuos de ejecucione ...

Publicado el 8-8 00:58

Implementación de Árboles de Fenwick para Modificaciones y Consultas de Rango

El Árbol Binario Indexado (BIT), también conocido como Árbol de Fenwick, es una estructura de datos eficiente para manejar sumas de prefijos y actualizaciones puntuales. En comparación con un Árbol de Segmentos (Segment Tree), el BIT consume menos memoria y presenta una implementación más concisa, aunque tradicionalmente está limitado a operaci ...

Publicado el 8-2 16:00

Optimización de BFS: El impacto crítico de marcar nodos visitados en el momento correcto

En el desarrollo de algoritmos de búsqueda en grafos o matrices, la implementación de la Búsqueda en Anchura (BFS) parece directa. Sin embargo, existe un detalle sutil en la gestión de los estados de visita que puede degradar el rendimiento de una solución eficiente a una que exceda el tiempo límite de ejecución (TLE). Este problema se manifies ...

Publicado el 8-2 09:17

Conversión de una lista enlazada ordenada en un árbol de búsqueda binaria equilibrado

Descripción del desafío El problema consiste en transformar una lista enlazada simple, cuyos elementos están ordenados de forma ascendente, en un árbol binario de búsqueda (BST) que esté balanceado en altura. Un árbol balanceado se define como aquel en el que la diferencia de profundidad entre los subárboles izquierdo y derecho de cualquier nod ...

Publicado el 7-29 14:47

Operaciones Fundamentales con Listas Enlazadas: Eliminación, Diseño y Reversión

Eliminación de Elementos en Listas Enlazadas (LeetCode 203) La eliminación de nodos en una lista enlazada es una operación fundamental que presenta particularidades, especialmente al tratar con el primer nodo. Exploraremos dos estrategias principales: la eliminación directa y el uso de un nodo ficticio (dummy head) para simplificar la lógica. E ...

Publicado el 7-26 22:38

Algoritmos de búsqueda de subcadenas: Fuerza Bruta y KMP

La búsqueda de cadenas es un proceso fundamental en computación que consiste en localizar la posición inicial de una cadena secundaria (llamada patrón) dentro de una cadena principal (llamada texto). Si el patrón existe, se devuelve su índice inicial; de lo contrario, se retorna un valor negativo, usualmente -1. Algoritmo de Fuerza Bruta (Brute ...

Publicado el 7-21 18:46

Resolución de Tres Problemas Clásicos de Programación Dinámica

Problema 1: Subsecuencia Común Más Larga Enunciado Dadas dos cadenas de texto text1 y text2, determina la longitud de la subsecuencia común más larga entre ambas. Una subsecuencia se define como una nueva cadena generada a partir de la original mediante la eliminación de ciertos caracteres, respetando el orden relativo de los caracteres restant ...

Publicado el 7-19 00:09