Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/01/2015, 05:39
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 10 meses
Puntos: 32
Implementación pila de manera eficiente.

Buenas,

Según tengo entendido, los arrays en javascript tienen implementados los siguientos métodos con la siguiente complejidad algorítmica.
Código Javascript:
Ver original
  1. push // O(1)
  2. pop // O(1)
  3. shift // O(n) pues al quitar el primer elemento hay que desplazar el resto de elementos
  4. unshift // O(n) pues al insertar un elemento en la primera posición hay que desplazar el resto

Esto hace que se pueda implementar una pila de manera eficiente usando push i pop pero no se pueda implementar un cola de manera eficiente usando las combinaciones unshift-pop o push-shift.

Entonces la manera que se me ha ocurrido de implementar una cola es mediante los objetos de javascript, que al ser hashes tanto la inserción como el borrado tienen un coste constante O(1). Por ejemplo:

Código Javascript:
Ver original
  1. function Queue (){
  2.    this.elements = {}
  3.    this.begin = 0;
  4.    this.end = -1;
  5. }
  6.  
  7. Queue.prototype.enqueue = function (element) {
  8.    this.end++;
  9.    this.elements[this.end] = element;
  10.    
  11. }
  12.  
  13. Queue.prototype.dequeue = function () {
  14.    var value = this.elements[this.begin];
  15.    if (this.begin === this.end) {
  16.       Queue.call(this); // si la cola tiene 1 elemento dejarla vacía y resetear indices begin y end
  17.    } else if (this.begin < this.end) {
  18.       delete this.elements[this.begin];
  19.       this.begin++;
  20.    }
  21.    return value;
  22. }

¿Tiene algún inconveniente? ¿Hay mejores maneras de implementar colas en javascript?

Un saludo y gracias.
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 09/01/2015 a las 05:51