es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una estructura de datos rápida para almacenar muchas variables sin signo de tipo largo.

En un código en C++, para cada entrada del usuario, estoy generando como máximo 20M de números tipo unsigned long uno por uno y verificando si son compatibles o no con las entradas. Los números generados son completamente diferentes según las diferentes entradas, sin embargo, sé que como máximo el 10% de ellos son números únicos. Por lo tanto, no quiero volver a verificar los números repetitivos por razones de rendimiento, ya que verificar los números es un poco costoso en mi implementación.

Por lo tanto, decidí generar y almacenar los números uno por uno en un contenedor y verificar si son nuevos, para realizar otros procesos costosos en ellos. He probado muchos contenedores en C++, y finalmente encontré que unordered_set es el más rápido en mi caso particular, sin embargo, todavía es demasiado lento. Tal vez pueda encontrar la distribución de los números para cada entrada, pero no sé cómo hacerlo más rápido. ¿Puedo usar mejores funciones de hash o incluso otros contenedores?

Cualquier recomendación será apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C++, contenedores, tabla hash y números enteros sin signo de longitud larga, sugeriría explorar opciones alternativas de contenedores, como una tabla hash implementada con una función hash personalizada que tenga en cuenta las propiedades únicas de los datos de entrada.

    Además, puede considerar la generación previa de un conjunto de números únicos para cada entrada y almacenarlos en un contenedor, que luego se puede reutilizar para entradas posteriores. Esto eliminaría la necesidad de verificar números repetitivos y reduciría el tiempo de ejecución general del programa.

    Otro enfoque podría ser optimizar los procesos costosos realizados en los números mismos, ya que esto puede tener un impacto significativo en el rendimiento general.

    En última instancia, la mejor solución debería adaptarse a los requisitos y características específicas del programa y sus entradas. Puede ser útil realizar más perfiles y pruebas de referencia para determinar el enfoque más eficiente.

Comments are closed.