Code prioritarie in javascript

Code prioritarie in javascript
Una coda prioritaria è un'estensione di una semplice struttura dei dati della coda con elementi contenenti un valore prioritario, una coda è una raccolta di elementi in cui il primo elemento ad entrare nella coda è il primo elemento a uscire di coda. Questa tecnica di esecuzione è nota come FIFO (primo in e primo fuori). Prendi in considerazione una linea di persone in piedi fuori da un bancoma. La persona che si unisce alla fine della fila per l'ATM sarà l'ultima a usare il bancomat.

Quindi, ora sappiamo cos'è una coda di base, ma per quanto riguarda la coda prioritaria? Nella coda prioritaria, ogni elemento che entra nella coda ha due valori, un valore prioritario e i dati. Gli elementi che hanno lo stesso valore prioritario saranno eseguiti in base a FIFO (primo in e primo fuori) Ma gli elementi con priorità più elevata di altri verranno eseguiti per primi, non importa quando sono stati aggiunti nella coda.

Questo è un argomento avanzato della struttura dei dati, quindi supponiamo che tu abbia familiarità con il funzionamento di JavaScript e le funzionalità di base di JavaScript. Per implementare una coda prioritaria in JavaScript dobbiamo prima sapere come implementare una semplice coda in JavaScript.

Implementazione di una coda in JavaScript

I concetti della struttura dei dati come code, stack, cumuli o code prioritarie sono implementati utilizzando array in JavaScript.

Definiamo una funzione che definirà la nostra struttura:

funzione queue ()
// Il codice successivo verrà inserito qui all'interno

Sappiamo che le code sono implementate con array, quindi creeremo un array denominato collezioni

All'interno della funzione:

array = [];

Ora, per implementare la struttura dei dati delle code, dobbiamo implementare le seguenti funzionalità:

  • ACQUEUE: per aggiungere un nuovo elemento alla fine dell'elenco
  • Dequeue: per rimuovere il primo elemento dall'elenco
  • isEmpty: per verificare se la coda è vuota o no
  • Dimensione: per restituire la lunghezza della coda
  • Front: per restituire il valore del primo elemento nell'elenco
  • Stampa: per stampare la coda

Queste funzionalità sono tutte facilmente aggiunte utilizzando le seguenti righe di codice:

functionQueue ()
array = [];
Questo.print = function ()
console.log (array);
;
Questo.enqueue = function (newMem)
vettore.push (newmem);
;
Questo.dequeue = function ()
ReturnArray.spostare();
;
Questo.front = function ()
Array di ritorno [0];
;
Questo.size = function ()
ReturnArray.lunghezza;
;
Questo.isEmpty = function ()
restituzione (array.lunghezza === 0);
;

Ora che abbiamo pronto la nostra struttura dei dati, dobbiamo creare un oggetto mappato a questa struttura, lo facciamo usando la linea:

var newQueue = new queue ();

Ora, abbiamo bisogno che alcuni elementi vengano posizionati in coda, lo facciamo usando le seguenti righe:

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

Per guardare come appare la nostra coda in questo momento possiamo chiamare la funzione di stampa così:

NewQueue.stampa();

Ottiamo il seguente output sulla nostra console:

Per testare, se l'implementazione del primo e primo out funziona correttamente, stiamo per dequeue un elemento dall'elenco e stampare il valore principale e quindi stampare l'intera coda rimanente con le seguenti righe:

NewQueue.dequeue ();
console.Registro (NewQueue.davanti());
NewQueue.stampa();

Lo snippet completo del codice della struttura della coda è:

functionQueue ()
array = [];
Questo.print = function ()
console.log (array);
;
Questo.enqueue = function (newMem)
vettore.push (newmem);
;
Questo.dequeue = function ()
ReturnArray.spostare();
;
Questo.front = function ()
Array di ritorno [0];
;
Questo.size = function ()
ReturnArray.lunghezza;
;
Questo.isEmpty = function ()
ReturnArray.lunghezza === 0;
;

varNewQueue = new queue ();
NewQueue.enqueue ("a");
NewQueue.enqueue ("b");
NewQueue.enqueue ("c");
NewQueue.stampa();
NewQueue.dequeue ();
console.Registro (NewQueue.davanti());
NewQueue.stampa();

All'esecuzione di questo codice, possiamo osservare il seguente risultato sulla console:

Quindi, quando abbiamo chiamato la funzione dequeue ha rimosso il primo elemento dall'elenco. Successivamente, abbiamo verificato l'elemento principale nella coda che era "B". Quindi abbiamo stampato di nuovo la coda e ci ha dato la coda rimanente nell'ordine corretto. Ciò significa che la nostra implementazione in coda funziona perfettamente:

Implementazione di una coda prioritaria in JavaScript

Sappiamo la differenza tra una coda normale e una coda prioritaria è che gli elementi all'interno della coda prioritaria contengono un valore prioritario insieme ai loro dati. Ciò significa che tutta la funzionalità della coda prioritaria è la stessa di una coda normale ad eccezione del Funzione enqueue.

Nelle code prioritarie, la funzione ACQUEUE, pone l'elemento prioritario più alto prima dell'elemento prioritario inferiore. E se due o più elementi hanno la stessa priorità, vengono posizionati elementi appena aggiunti all'estremità successiva della coda per mantenere un metodo di valutazione primo e primo.

Quindi, tenerlo presente che possiamo scrivere la nuova funzione Enqueue per la coda prioritaria con le seguenti righe di codice:

Questo.enqueue = function (newMem)
var array = [];
// Il codice successivo verrà inserito qui all'interno
;

La prima cosa che facciamo nella funzione ACQUEUE è che se la raccolta è vuota, quindi spingiamo l'elemento sulla coda:

se questo.è vuoto())
vettore.push (newmem);

Se la coda non è vuota:

  • Quindi verificheremo la priorità del nuovo elemento con la priorità di ogni elemento nella coda
  • Se la priorità del nuovo elemento è inferiore all'elemento della raccolta.Aggiungeremo il nuovo elemento prima dell'elemento di quella collezione
  • Questo è perché 1 significa prima priorità mentre 2 significa seconda priorità
  • Se la priorità del nuovo elemento maggiore di valore (più basso nella priorità effettiva), allora passeremo alla fine della coda e aggiungeremo l'elemento lì
altro
var aggiunto = false;
per (vari = 0; iif (newmem [1] < array[i][1])
vettore.giunzione (i, 0, newmem);
aggiunto = vero;
rottura;


Se (!aggiunto)
vettore.push (newmem);

Il tutto accodare La funzione sembrerà così:

Questo.enqueue = function (newMem)
se questo.è vuoto())
vettore.push (newmem);
altro
var aggiunto = false;
per (vari = 0; iif (newmem [1] < array[i][1])
vettore.giunzione (i, 0, newmem);
aggiunto = vero;
rottura;


Se (!aggiunto)
vettore.push (newmem);


;

Il resto delle funzioni della coda prioritaria è praticamente uguale alla coda normale, con una leggera variazione della funzione dequeue per visualizzare solo il nome e non il valore dell'elemento. L'intero snippet del codice in coda di priorità è come:

functionPriorityQueue ()
vararray = [];
Questo.printCollection = function ()
console.log (array);
;
Questo.enqueue = function (newMem)
se questo.è vuoto())
vettore.push (newmem);
altro
var aggiunto = false;
per (vari = 0; iif (newmem [1] vettore.giunzione (i, 0, newmem);
aggiunto = vero;
rottura;


Se (!aggiunto)
vettore.push (newmem);


;
Questo.dequeue = function ()
var value = array.spostare();
Valore restituito [0];
;
Questo.front = function ()
ReturnArray [0];
;
Questo.size = function ()
ReturnArray.lunghezza;
;
Questo.isEmpty = function ()
ReturnArray.lunghezza === 0;
;

È ora di mettere elementi in coda usando le seguenti righe di codice:

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

Come puoi vedere, la prima priorità è il "Microsoft" elemento con valore 1. Deve essere all'inizio della coda anche se è stato aggiunto al 3 ° posto.

Ora, se chiamiamo la funzione Dequeue e quindi la funzione di stampa di nuovo il primo elemento dovrebbe essere rimosso dall'elenco:

PQ.dequeue ();
PQ.printCollection ();

Ecco, la nostra coda prioritaria funziona perfettamente.

Conclusione

Le code sono concetti di struttura dei dati che funzionano sul metodo di valutazione del primo e primo. Allo stesso modo, le code prioritarie funzionano sulla valutazione del primo e del primo fuori, ma con un valore aggiuntivo di "priorità", l'elemento con la massima priorità verrà eseguito per primo non importa quando sono stati aggiunti alla coda. In questo post, abbiamo imparato come implementare una semplice coda in JavaScript e come utilizzare quella struttura dei dati per implementare il funzionamento di una coda prioritaria.