Colas prioritarias en JavaScript

Colas prioritarias en JavaScript
Una cola de prioridad es una extensión de una estructura de datos de cola simple con elementos que contienen un valor prioritario, una cola es una colección de elementos en los que el primer elemento para ingresar a la cola es el primer elemento que sale de una cola. Esta técnica de ejecución se conoce como la FIFO (primero en y primera vez). Considere una línea de personas paradas afuera de un cajero automático, la persona que se pare primero en la línea será la que use el cajero automático primero. La persona que se une al final de la cola para el cajero automático será la última en usar el cajero automático.

Entonces, ahora sabemos qué es una cola básica, pero ¿qué pasa con la cola de prioridad?? En la cola de prioridad, cada elemento que ingresa a la cola tiene dos valores, un valor de prioridad y los datos. Los elementos que tienen el mismo valor de prioridad se ejecutarán en función de FIFO (primero en y primera vez) pero los elementos con mayor prioridad que otros se ejecutarán primero sin importar cuándo se agregaron a la cola.

Este es un tema de estructura de datos avanzado, por lo que asumimos que está familiarizado con cómo funciona JavaScript y las funcionalidades básicas de JavaScript. Para implementar una cola prioritaria en JavaScript, primero debemos saber cómo implementar una cola simple en JavaScript.

Implementación de una cola en JavaScript

Los conceptos de estructura de datos como colas, pilas, montones o colas prioritarias se implementan utilizando matrices en JavaScript.

Definamos una función que definirá nuestra estructura:

function queue ()
// El código posterior se colocará aquí dentro

Sabemos que las colas se implementan con matrices, por lo que vamos a crear una matriz llamada Collections

Dentro de la función:

array = [];

Ahora, para implementar la estructura de datos de colas, necesitamos implementar las siguientes funcionalidades:

  • Enqueue: para agregar un nuevo elemento al final de la lista
  • Dequeue: para eliminar el primer elemento de la lista
  • isEmpty: para verificar si la cola está vacía o no
  • Tamaño: para devolver la longitud de la cola
  • Frente: para devolver el valor del primer elemento en la lista
  • Imprimir: para imprimir la cola

Todas estas funcionalidades se agregan fácilmente utilizando las siguientes líneas de código:

functionue ()
array = [];
este.print = function ()
consola.log (matriz);
;
este.enqueue = function (newmem)
formación.Push (Newmem);
;
este.dequeue = function ()
retrasar.cambio();
;
este.front = function ()
matriz de retorno [0];
;
este.size = function ()
retrasar.longitud;
;
este.isEmpty = function ()
regreso (matriz.longitud === 0);
;

Ahora, que tenemos nuestra estructura de datos lista, necesitamos crear un objeto asignado a esta estructura, lo hacemos usando la línea:

var newqueue = new Queue ();

Ahora, necesitamos que se coloquen algunos elementos en la cola, lo hacemos usando las siguientes líneas:

nieve.enqueue ('a');
nieve.enqueue ('b');
nieve.enqueue ('c');

Para ver cómo se ve nuestra cola en este momento, podemos llamar a la función de impresión así:

nieve.imprimir();

Obtenemos la siguiente salida en nuestra consola:

Para probar, si la implementación de primera entrada y primera vez funciona correctamente, vamos a despojar un elemento de la lista e imprimir el valor más importante e imprimir la cola completa con las siguientes líneas:

nieve.dequeue ();
consola.Log (Newqueue.frente());
nieve.imprimir();

El fragmento de código completo de la estructura de la cola es:

functionue ()
array = [];
este.print = function ()
consola.log (matriz);
;
este.enqueue = function (newmem)
formación.Push (Newmem);
;
este.dequeue = function ()
retrasar.cambio();
;
este.front = function ()
matriz de retorno [0];
;
este.size = function ()
retrasar.longitud;
;
este.isEmpty = function ()
retrasar.longitud === 0;
;

varnewqueue = new Queue ();
nieve.enqueue ("a");
nieve.enqueue ("b");
nieve.enqueue ("c");
nieve.imprimir();
nieve.dequeue ();
consola.Log (Newqueue.frente());
nieve.imprimir();

Al ejecutar este código, podemos observar el siguiente resultado en la consola:

Entonces, cuando llamamos a la función dequeue, eliminó el primer elemento de la lista. Después de eso, verificamos el elemento principal en la cola que fue "b". Luego imprimimos la cola nuevamente y nos dio la cola restante en el orden correcto. Esto significa que la implementación de nuestra cola funciona perfectamente:

Implementación de una cola de prioridad en JavaScript

Sabemos que la diferencia entre una cola normal y una cola de prioridad es que los elementos dentro de la cola de prioridad contienen un valor de prioridad junto con sus datos. Esto significa que toda la funcionalidad de la cola de prioridad es la misma que una cola normal, excepto la Función de enqueue.

En las colas prioritarias, la función Enqueue coloca el elemento de mayor prioridad antes del elemento de menor prioridad. Y si dos o más elementos tienen la misma prioridad, entonces se colocan elementos recién agregados en el extremo posterior de la cola para mantener un método de valoración de primera entrada y primera vez.

Por lo tanto, teniendo en cuenta que podemos escribir la nueva función de Enqueue para la cola de prioridad con las siguientes líneas de código:

este.enqueue = function (newmem)
var array = [];
// El código posterior se colocará aquí dentro
;

Lo primero que hacemos en la función Enqueue es que si la colección está vacía, entonces simplemente empujamos el elemento a la cola:

si esto.esta vacio())
formación.Push (Newmem);

Si la cola no está vacía:

  • Luego vamos a verificar la prioridad del nuevo elemento con la prioridad de cada elemento en la cola
  • Si la prioridad del nuevo elemento es menor que el elemento de la colección.Vamos a agregar el nuevo elemento antes del elemento de esa colección
  • Esto es porque 1 significa la primera prioridad mientras 2 significa segunda prioridad
  • Si la prioridad del nuevo elemento mayor en valor (menor en la prioridad real), entonces vamos a pasar al final de la cola y agregar el elemento allí
demás
var agregado = falso;
para (vari = 0; iif (Newmem [1] < array[i][1])
formación.empalme (i, 0, newmem);
agregado = verdadero;
romper;


si (!agregado)
formación.Push (Newmem);

El conjunto enoue la función se verá así:

este.enqueue = function (newmem)
si esto.esta vacio())
formación.Push (Newmem);
demás
var agregado = falso;
para (vari = 0; iif (Newmem [1] < array[i][1])
formación.empalme (i, 0, newmem);
agregado = verdadero;
romper;


si (!agregado)
formación.Push (Newmem);


;

El resto de las funciones de la cola prioritaria son más o menos lo mismo que la cola normal, con un ligero cambio en la función degradación para mostrar solo el nombre y no el valor del elemento. Todo el fragmento de código de cola de prioridad es como:

functionPriorityQueue ()
vararray = [];
este.printCollection = function ()
consola.log (matriz);
;
este.enqueue = function (newmem)
si esto.esta vacio())
formación.Push (Newmem);
demás
var agregado = falso;
para (vari = 0; iif (Newmem [1] formación.empalme (i, 0, newmem);
agregado = verdadero;
romper;


si (!agregado)
formación.Push (Newmem);


;
este.dequeue = function ()
valor var = array.cambio();
valor de retorno [0];
;
este.front = function ()
returnArray [0];
;
este.size = function ()
retrasar.longitud;
;
este.isEmpty = function ()
retrasar.longitud === 0;
;

Tiempo para poner elementos en la cola utilizando las siguientes líneas de código:

var pq = new priorityqueue ();
pq.Enqueue (["Google", 2]);
pq.enqueue (["bing", 3]);
pq.Enqueue (["Microsoft", 1]);
pq.Enqueue (["Apple", 2]);
pq.printCollection ();

Como puede ver, la primera prioridad es la "Microsoft" elemento con valor 1. Debe estar al comienzo de la cola incluso si se agregó en el 3er lugar.

Ahora, si llamamos a la función Dequeue y luego la función de impresión nuevamente, el primer elemento debe eliminarse de la lista:

pq.dequeue ();
pq.printCollection ();

Ahí tienes, nuestra cola prioritaria funciona perfectamente.

Conclusión

Las colas son conceptos de estructura de datos que funcionan en el método de valoración de primera vez y primero en salir. Del mismo modo, las colas de prioridad funcionan en la valoración de la primera y primera out, pero con un valor adicional de "prioridad", el elemento con la más alta prioridad se ejecutará primero sin importar cuándo se agregaron a la cola. En esta publicación, aprendimos cómo implementar una cola simple en JavaScript y cómo usar esa estructura de datos para implementar el funcionamiento de una cola de prioridad.