Estoy bastante familiarizado con dónde usar pilas, colas y árboles en aplicaciones de software, pero nunca antes había usado una Deque (cola de doble terminación). ¿Dónde los encontraría típicamente en la naturaleza? ¿Estaría en los mismos lugares que una cola pero con gribbilies adicionales?
data-structures
Ingeniero mundial
fuente
fuente
Respuestas:
Una forma en que se usa una deque es "envejecer" los artículos. Por lo general, se usa como una función de deshacer o historial. Se inserta una nueva acción en la deque. Los artículos más antiguos están en el frente. Un límite en el tamaño de la reducción obliga a eliminar los elementos en la parte delantera en algún momento a medida que se insertan nuevos elementos (envejeciendo los elementos más antiguos). Luego proporciona una forma rápida de acceder a ambos extremos de la estructura porque conoce instantáneamente los elementos más antiguos y más nuevos para eliminar el frente y cometer la acción más antigua en O (1) o deshacer en tiempo O (1).
fuente
Excelente pregunta No recuerdo que nuestro curso CS 102 mencionara una sola aplicación para la cola de doble final.
Hasta el día de hoy, la única aplicación que conozco es el programador de robo de trabajo mencionado en el artículo de Wikipedia .
Funciona esencialmente de la siguiente manera:
En un modelo de procedimiento normal de un solo subproceso, cada llamada de función empuja un registro de activación en una llamada pila de llamadas . Un registro de activación contiene las variables y parámetros locales de esa llamada. Una vez que se completa la llamada al método ("retornos"), el último registro de activación se saca de la pila de llamadas.
Esto es particularmente importante porque así es como se implementa la recursividad: la estructura de la recursión se representa en el estado actual de la pila de llamadas.
Al poner en paralelo un algoritmo recursivo, podemos explotar esta propiedad reemplazando la pila de llamadas con una cola de llamadas. Cada subproceso en el cálculo obtiene su propia cola de llamadas y empuja y muestra registros de activación como en una ejecución secuencial.
Pero una vez que un subproceso ha terminado su trabajo (= su cola de llamadas está vacía), roba el trabajo de otro subproceso al eliminar un registro de activación de la cola de llamadas de ese subproceso al eliminarlo del extremo "incorrecto".
Básicamente, la cola de llamadas actúa como dos pilas de llamadas que ahora sirven a dos hilos.
fuente