tipos - Rango de escala/estructura de mapa de intervalo
tipos de escalas de medicion en investigacion (1)
Probablemente encapsularía el RangeMap
de Guava. Todo lo que necesita es una clase de tres métodos, detrás de la cual puede ocultar la colección que no es de escalada.
Tenía curiosidad por lo difícil que sería lanzar mi propia solución basada en Java NavigableMap
, y es bastante trivial:
- define una clase que contiene
MyValue
(inicio, final, valor almacenado) - Utilice un mapa que
MyValue
punto de inicio alMyValue
correspondienteMyValue
Con solo 40 líneas en Java con Lombok (y probablemente menos en Scala), no temería ningún mantenimiento. Escribí una test muy rudimentaria.
Tengo casi la misma pregunta que se menciona en Estructuras de datos que pueden asignar un rango de claves a un valor , pero para Scala.
Es decir, me gustaría tener un sistema mutable de rangos 1D no superpuestos [a [i], b [i]) que se asignaría a algún tipo de valor v [i] . Una estructura de datos subyacente estándar para hacer este tipo de trabajo es un árbol rojo-negro.
Operaciones que me gustaría que tuviera, preferiblemente todas deberían tener una complejidad de O (log n):
- Consulte y obtenga un rango dado (inicio, final, valor almacenado) o la falta de este al especificar cualquier punto dentro de él.
- Insertar un nuevo rango en esta estructura.
- Eliminar un rango de estructura
Entonces, supongo que hasta ahora veo las siguientes variantes, todas las cuales tienen sus contras:
- Coloque su propio contenedor sobre el TreeMap de Java : rápido y sucio, pero probablemente malo a largo plazo debido a la falta de un mantenimiento adecuado
- Use el RangeMap de RangeMap de Guava - posible, pero sería bastante incómodo en el mundo de las colecciones de Scala
- Trate de usar las implementaciones del árbol rojo-negro de Scala e intente rodar su propio rollo, sin embargo, creo que sería bastante difícil, dado que el TreeMap de Scala es inmutable solo y pierde los métodos de búsqueda directa, como el TreeMap de
floorEntry
¿Me estoy perdiendo de algo? ¿Hay bibliotecas de extensiones de colecciones bien mantenidas de tipo guava que utilicen API centradas en Scala que amplíen las colecciones básicas de Scala?
Preguntas fuertemente relacionadas:
- ¿Está migrando el código de Java TreeMap a Scala? - menciona que "solo debes usar el Mapa de árbol de Java" y olvidarte de cualquier otra cosa
- Versiones de Java de este problema: