2011-05-06 15 views
56

Me gustaría pedir recomendaciones de biblioteca de JavaScript/bibliotecas que proporcionan una implementación de algunas estructuras de datos básicas como una cola de prioridad, mapa con claves arbitrarias, intentos, gráficos, etc. junto con algunos algoritmos que operan en ellos.biblioteca de estructuras de datos de JavaScript

Lo que más me interesa:

  • El conjunto de funciones que se tratan,
  • La flexibilidad de la solución - esto se aplica sobre todo a los gráficos. Por ejemplo tengo que usar una aplicación gráfica suministrada,
  • Uso de las características funcionales de la lengua - de nuevo a veces da mayor flexibilidad,
  • rendimiento de la aplicación

EDITAR

Ok, me gustaría señalar que soy consciente de que es posible implementar usando js las siguientes estructuras de datos:

  • Un mapa, si los valores clave son cadenas o números,
  • Un conjunto, (usando una aplicación MAP),
  • Una cola, aunque, como se señala más adelante, es ineficiente en algunos navegadores,

Por el momento estoy interesado principalmente en colas de prioridad (no confundir con colas normales), implementaciones de gráficos que no son muy intrusivas en cuanto al formato del gráfico de entrada. Por ejemplo, podrían usar devoluciones de llamada para atravesar la estructura del gráfico en lugar de acceder a algunas propiedades concretas con nombres fijos.

+7

No es realmente una respuesta, así que comentaré: algunos de ellos son parte del lenguaje. Todos los objetos de JavaScript son mapas con claves arbitrarias; y como los valores de propiedad pueden ser objetos, forman gráficos. JavaScript "arrays" (que [no son realmente arrays]) (http://blog.niftysnippets.org/2011/01/myth-of-arrays.html)) proporcionan funciones de pila ('push',' pop'). –

+0

@Crowder Sí, estoy de acuerdo. Pero las claves realmente tienen que ser numéricas o de cadena, por lo que no lo llamaría arbitrario. Para push & pop, seguro que puedo usarlo para implementar una cola pero no mucha ayuda con una cola de prioridad. Estoy pidiendo las estructuras de datos que js carece (le faltan muchas). – julkiewicz

+0

Es por eso que fue un comentario, no una respuesta. :-) (Y sí, los nombres de propiedad deben ser cadenas. De hecho, incluso los índices de matriz son nombres de propiedad, y por lo tanto cadenas, aunque casi siempre usamos números - * en teoría * se convierten en cadenas y luego la propiedad es miró hacia arriba, aunque uno espera que las implementaciones optimicen eso.) –

Respuesta

32

recomiendo utilizar Cierre Biblioteca (sobre todo con el compilador de cierre).

Aquí tienes una biblioteca con estructuras de datos goog.structs. La biblioteca contiene:

goog.structs.AvlTree 
goog.structs.CircularBuffer 
goog.structs.Heap 
goog.structs.InversionMap 
goog.structs.LinkedMap 
goog.structs.Map 
goog.structs.PriorityQueue 
goog.structs.Set 

Como ejemplo, puede utilizar prueba de unidad: goog.structs.PriorityQueueTest.

Si necesita trabajar en matrices, también hay una matriz lib: goog.array.

Como se señala en los comentarios, la fuente se ha movido a github.com/google/closure y la nueva ubicación de la documentación es: google.github.io/closure-library.

+0

Sin duda se ve prometedor. ¿Entiendo que puedes usarlo sin el compilador de cierre de Google? – julkiewicz

+0

De hecho, sin embargo, es bastante conveniente usarlo con él, porque está haciendo una verificación de tipos y ayuda a prevenir errores tipográficos y otros errores ocasionales. –

+0

Parece una solución a un problema de larga data. Definitivamente le echaré un vistazo. – julkiewicz

3

Probablemente, la mayoría de lo que desea está incorporado en Javascript de una forma u otra, o es fácil de armar con la funcionalidad incorporada (las estructuras de datos nativas de Javascript son increíblemente flexibles). Puede que te guste JSClass.

En cuanto a las características funcionales de la lengua, underscore.js es en donde está ..

+3

No estoy de acuerdo. La mayoría de las bibliotecas, como underscore.js, ofrecen funciones de usabilidad: le permiten escribir códigos más cortos y elegantes. ¿Cómo ayudaría eso en la implementación de decir, una cola de prioridad? Específicamente solicité características que no están presentes en js. Claro, puedo implementar una prioridad junto con intentos y gráficos, sin embargo, si alguien lo ha hecho por mí, no me importaría usar este trabajo. – julkiewicz

+0

Me gustaría ir con la ruta de underscore.js y aplicar todo lo que me falta. Google Closure es una gran biblioteca, pero realmente brilla cuando la usas con el compilador de cierre, además parece algo implementado por los codificadores Java y no JavaScript. –

0

data.js.

No creo que sea tan rico en funciones como desee, pero tiene gráficos, hash y colecciones.

Me gustaría tomar esto un comienzo ligero que puede extender.

En cuanto a lo que ofrece, está bien escrito, es eficiente y está documentado.

+3

Este enlace redirige a 'http: // substance.io/composer /' - un recurso de impresión en línea. Por favor, actualice ansere! – Cody

3

Puedo ayudarte con los mapas con claves arbitrarias: mi jshashtable hace esto, y también hay una implementación del conjunto de hash creado en la parte superior.

17

Usted puede intentar Buckets es una muy completa biblioteca de JavaScript estructura de datos que incluye:

  • lista enlazada
  • Diccionario
  • Diccionario Multi
  • árbol de búsqueda binaria
  • Pila
  • Queue
  • Set
  • Bolsa
  • binario Montón
  • cola de prioridad
1

¿Es su javascript en una aplicación, o en una página web? Si se trata de una aplicación, ¿por qué no subcontratar las estructuras de datos al Redis? Hay un client for nodejs

Redis es un almacén de clave-valor avanzado de código abierto. A menudo se lo denomina servidor de estructura de datos ya que las claves pueden contener cadenas, hashes, listas, conjuntos y conjuntos ordenados.

+1

Buen punto, sin embargo en mi caso fue el lado del cliente Javascript. – julkiewicz

+0

¿Qué significa 'lado del cliente'? –

+0

Quise decir que se ejecuta en un navegador. – julkiewicz

1

Agregando un enlace a una biblioteca javascript personalizada que proporciona colas de prioridad, procesamientos, procesamiento básico de gráficos y otra implementación, para futura referencia de los visitantes de este hilo. Salida dsjslib

1

Especialmente para estructuras gráfico similar, lo encuentro graphlib muy conveniente:

https://github.com/cpettitt/graphlib/wiki/API-Reference

Es muy sencillo, más rápido que otras implementaciones que probé, tiene todas las características básicas, popular algoritmos de gráficos y una exportación de datos JSON.

Cuestiones relacionadas