Tengo un mapa grande de String-> Integer y quiero encontrar los 5 valores más altos en el mapa. Mi enfoque actual implica traducir el mapa en una lista de matrices de objetos de par (clave, valor) y luego ordenar usando Collections.sort() antes de tomar los primeros 5. Es posible que una clave tenga su valor actualizado durante el curso de la operación .Encontrar los valores más altos de n en un mapa
Creo que este enfoque es aceptable con una sola hebra, pero si tuviera múltiples hilos todos activando la transposición y clasificación con frecuencia, no parece muy eficiente. La alternativa parece ser mantener una lista separada de las 5 entradas más altas y mantenerla actualizada cuando se realizan operaciones relevantes en el mapa.
¿Podría obtener algunas sugerencias/alternativas para optimizar esto, por favor? Me complace considerar diferentes estructuras de datos si hay un beneficio.
Gracias!
Dos preguntas: 1) ¿por qué tener un mapa? ¿necesita buscar valores para claves dadas? 2) ¿También necesita saber las claves para los 5 valores más altos? – pgras
@pgras: sí, otra función de la API es recibir una clave y devolver el valor actual para que el mapa sea un buen punto de partida. Necesitamos saber las claves para los valores más altos, por lo que me vi obligado a usar un objeto de par y no solo crear una lista de enteros. – Scruffers
¿Puede especificar qué requisitos de tiempo de ejecución tiene exactamente en mente? Su 'getHighestFive' actual es' O (n log n) ', mientras que cambiar el mapa con' lookup', 'insert' y' delete' es 'O (log n)' cada uno. ¿Desea bajar 'getHighestFive' a' O (1) 'mientras conserva los otros tiempos de ejecución? ¿Qué tiene que ver esto con múltiples hilos, quieres paralelizar 'getHighestFive'? –