2011-06-15 8 views
14

Tenía la intención de implementar una HashTable para localizar objetos rápidamente, lo que es importante para mi aplicación.¿Qué estructuras de datos se usan comúnmente para las memorias caché LRU y la ubicación rápida de objetos?

Sin embargo, no me gusta la idea de escanear y posiblemente tener que bloquear toda la tabla para localizar a qué objeto se accedió por última vez. Las tablas pueden ser bastante grandes.

¿Qué estructuras de datos se usan comúnmente para superar eso?

p. Ej. Pensé que podría lanzar objetos en una FIFO así como en la memoria caché para saber qué edad tiene algo. Pero eso no va a ser compatible con un algoritmo LRU.

¿Alguna idea? ¿Cómo lo hace el calamar?

+0

Gran pregunta. Una estructura de datos frecuentemente necesaria cuya implementación es más complicada de lo que parece ... –

Respuesta

13

Las listas vinculadas son buenas para las memorias caché LRU. Para las búsquedas indexadas dentro de la lista enlazada (para mover la entrada al final utilizado más recientemente de la lista enlazada), use una HashTable. La entrada utilizada menos recientemente siempre será la última en la lista vinculada.

+0

No estaría de acuerdo aquí, atravesar la lista va a ser una perra. – Puppy

+0

@DeadMG: ¿Necesitas necesariamente recorrer la lista? –

+1

@DeadMG: no es necesario recorrer la lista. –

6

Puede encontrar esto article en la implementación de la memoria caché LRU usando contenedores STL (o una alternativa basada en boost::bimap) interesante. Con STL, básicamente utiliza una combinación de un mapa (para búsqueda rápida de valores-clave) y una lista separada de claves o iteradores en ese mapa (para un fácil mantenimiento del historial de acceso).

Cuestiones relacionadas