Pregunta

Judy array es la estructura de datos rápida que puede representar una matriz dispersa o un conjunto de valores. ¿Hay para su implementación lenguajes administrados como C #? Gracias

¿Fue útil?

Solución

Vale la pena señalar que estas son a menudo llamados árboles o Judy Judy intentos si usted está buscando en Google para ellos.

También busqué una aplicación .Net pero no encontré nada. También vale la pena señalar que:

La aplicación está fuertemente diseñado alrededor de uso de la caché eficiente, ya que tales implementaciones específicas pueden depender del tamaño de ciertas construcciones utilizadas dentro de las estructuras sub altamente. Un administrado de .NET aplicación puede ser algo diferente en este sentido.

Hay algunos obstáculos significativos a lo que puedo ver (y hay probablemente más que mi breve análisis no realizados)

  • El API tiene algunos aspectos bastante anti-OO (por ejemplo, un puntero nulo es vista como un árbol vacío), de manera simplista, mover el puntero del estado para el LHS y hacer la conversión métodos funciones de instancia para C ++ no funcionaría.
  • La aplicación de las estructuras secundarias que miraba un uso intensivo hecho de punteros. No puedo ver de forma eficiente a su conversión en referencias en lenguajes administrados.
  • La aplicación es una destilación de una gran cantidad de ideas muy complejas que contrasta con la simplicidad de la API pública.
  • El código base es de unos 20 mil líneas (la mayor parte de lo complejo), esto no me parece que sea un puerto fácil.

Usted podría tomar la biblioteca y envolver el código C en C ++ / CLI (probablemente simplemente manteniendo internamente un puntero que es el trie c api y tener todas las llamadas c apuntan a éste). Esto proporcionaría una aplicación simplista, pero las librerías enlazadas para la aplicación nativa puede ser problemático (como la asignación de memoria podría). También necesitaría probablemente para hacer frente a la conversión de cadenas de bytes .NET para el viejo y simple * en la transición, así (o simplemente trabajar con bytes directamente)

Otros consejos

Judy realmente no encaja bien con lenguajes administrados. No creo que usted será capaz de usar algo como el TRAGO y obtener la primera capa hace automáticamente.

escribí PyJudy y terminé tener que hacer algunos cambios en la API no triviales que encajan bien en Python. Por ejemplo, he escrito en la documentación:

  

palabras matrices JudyL mapa a máquina   palabras de la máquina. En la práctica las palabras   almacenar enteros sin signo o punteros.   PyJudy soporta las cuatro asignaciones como   clases distintas.

  • pyjudy.JudyLIntInt - mapa sin firmar teclas de entero a entero sin signo valores
  • pyjudy.JudyLIntObj - mapa sin firmar teclas de números enteros a valores de objeto de Python
  • pyjudy.JudyLObjInt - Mapa de Python claves de objeto a entero sin signo valores
  • pyjudy.JudyLObjObj - Mapa de Python claves de objeto a valores de objeto Python

No he mirado el código durante algunos años para que mis recuerdos al respecto son bastante nebuloso. Fue mi primera biblioteca de extensión de Python, y recuerdo que me han pirateado juntos una especie de sistema de plantillas de generación de código. Hoy en día me gustaría usar algo como Genshi.

No puedo señalar a las alternativas a Judy - que es una razón por la que estoy buscando Stackoverflow

.

Editar:. Me han dicho que mis números de sincronización en la documentación están fuera de lo que la documentación de Judy sugiere porque Judy se desarrolla para líneas de caché de 64 bits y mi PowerBook era sólo 32 bits de

Algunos otros enlaces:

El último tiene números de comparación para diferentes implementaciones trie de alto rendimiento.

Esto está resultando más difícil de lo que pensaba. PyJudy podría ser digno de una mirada, como sería Tie :: Judy. Hay algo en Softpedia , y algo Rubí-ish. El problema es que ninguno de estos están específicamente .NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top