Implementación de caché LRU – Part 1

¿Cómo implementar el esquema de almacenamiento en caché LRU? ¿Qué estructuras de datos se deben utilizar?  Se nos da el número total de páginas posibles que se pueden referir. También se nos da un tamaño de caché (o memoria) (la cantidad de marcos de página que el caché puede contener a la vez). El esquema … Continue reading «Implementación de caché LRU – Part 1»

Árbol indexado binario: actualizaciones de rango y consultas de puntos

Dada una array arr[0..n-1]. Es necesario realizar las siguientes operaciones. actualizar (l, r, val) : agrega ‘val’ a todos los elementos en la array desde [l, r]. getElement(i) : Encuentra el elemento en la array indexada en ‘i’. Inicialmente, todos los elementos de la array son 0. Las consultas pueden estar en cualquier orden, es … Continue reading «Árbol indexado binario: actualizaciones de rango y consultas de puntos»

Árbol de segmentos | Implementación eficiente

Consideremos el siguiente problema para comprender los árboles de segmentos sin recursividad. Tenemos una array arr[0 . . . n-1]. Deberíamos poder,   Encuentre la suma de elementos del índice l a r donde 0 <= l <= r <= n-1 Cambia el valor de un elemento específico de la array a un nuevo valor x. … Continue reading «Árbol de segmentos | Implementación eficiente»

Número de elementos mayores que K en el rango L a R utilizando Fenwick Tree (consultas sin conexión)

Prerrequisitos: Fenwick Tree (Árbol indexado binario) Dada una array de N números y una cantidad de consultas donde cada consulta contendrá tres números (l, r y k). La tarea es calcular el número de elementos del arreglo que son mayores que K en el subarreglo [L, R]. Ejemplos:   Input: n=6 q=2 arr[ ] = { 7, … Continue reading «Número de elementos mayores que K en el rango L a R utilizando Fenwick Tree (consultas sin conexión)»

Estructura de datos basada en políticas de mapa en g ++

Hay algunas estructuras de datos que son compatibles con el compilador g ++ y no forman parte de la biblioteca estándar de C++. Uno de estos es: Estructura de datos basada en políticas , que se utiliza para alto rendimiento, flexibilidad, seguridad semántica y conformidad con los contenedores correspondientes en std. Esto también se puede usar … Continue reading «Estructura de datos basada en políticas de mapa en g ++»

Tamaño de componente más grande en un gráfico formado al conectar Nodes no coprimos

Dado un gráfico con N Nodes y sus valores definidos en la array A, la tarea es encontrar el tamaño de componente más grande en un gráfico conectando Nodes no coprimos. Una arista se encuentra entre dos Nodes U y V si no son coprimos, lo que significa que el máximo común divisor de A[U] … Continue reading «Tamaño de componente más grande en un gráfico formado al conectar Nodes no coprimos»

2-3 árboles | (Buscar, Insertar y Eliminar)

En los árboles de búsqueda binarios, hemos visto que el tiempo de caso promedio para operaciones como buscar/insertar/eliminar es O(log N) y el tiempo en el peor de los casos es O(N) donde N es el número de Nodes en el árbol. Al igual que otros árboles, se incluyen los árboles AVL, Red Black Tree, … Continue reading «2-3 árboles | (Buscar, Insertar y Eliminar)»

BK-Árbol | Introducción e implementación

BK Tree o Burkhard Keller Tree es una estructura de datos que se utiliza para realizar la revisión ortográfica basada en el concepto de distancia de edición (distancia de Levenshtein). Los árboles BK también se utilizan para la coincidencia aproximada de strings. Se pueden implementar varias funciones de corrección automática en muchos programas en función … Continue reading «BK-Árbol | Introducción e implementación»

Consultas LCM de rango

Dada una array de enteros, evalúe consultas de la forma LCM(l, r). Puede haber muchas consultas, por lo tanto, evalúe las consultas de manera eficiente.  LCM (l, r) denotes the LCM of array elements that lie between the index l and r (inclusive of both indices) Mathematically, LCM(l, r) = LCM(arr[l], arr[l+1] , ……… , … Continue reading «Consultas LCM de rango»

Aplicación 6 del árbol de sufijos: la substring palindrómica más larga

Dada una string, encuentra la substring más larga que es palíndromo. Ya hemos discutido los enfoques Naïve [O(n 3 )], cuadrático [O(n 2 )] y lineal [O(n)] en el Conjunto 1 , Conjunto 2 y el Algoritmo de Manacher . En este artículo, discutiremos otro enfoque de tiempo lineal basado en el árbol de sufijos. Si la … Continue reading «Aplicación 6 del árbol de sufijos: la substring palindrómica más larga»