Cómo ordenar y combinar un conjunto de números en función de su aparición en múltiples arreglos de manera óptima

Creo que, según su ejemplo, lo que quiere decir es ordenar según el * número * de ocurrencias, en orden descendente. Por lo tanto, si se le dan tres listas, la salida debe ser primero todos los números que aparecen en las tres listas, luego todos los números que aparecen dos veces, luego todos los números que aparecen solo una vez. Según su ejemplo, no parece que le importe el orden dentro de cada conjunto con el mismo número de ocurrencias.

Existe una solución simple de tiempo O (N) que puede implementarse mediante un diccionario (tabla hash) que asigna números de entrada al recuento de veces que ocurren.

Primero procese cada una de las matrices de entrada elemento por elemento. La primera vez que encuentre un número, insértelo en el diccionario con un recuento de ‘1’. En sucesos posteriores, aumente su recuento. El recuento nunca será mayor que el número de matrices de entrada.

Luego, inicialice las matrices de salida K, donde K es el número de matrices de entrada.

Recorre todas las claves del diccionario. Si (entrada, conteo) está en el diccionario, entonces ponga “entrada” en la matriz de salida “conteo”.

Finalmente, visite cada una de las matrices de salida, de mayor a menor, e imprima todos sus elementos.

(Puede hacer esto con una pasada menos usando listas doblemente vinculadas para construir las listas de salida al mismo tiempo que agrega o actualiza elementos en el diccionario).

En python:

def sortByFrequency (inputLists):
# Cuenta el número de veces que ocurre cada elemento
countMap = {}
para l en inputLists:
para num en l:
countMap [num] = countMap.get (num, 0) + 1

# Separar elementos en cubos según la frecuencia
salida = [[] para i en xrange (len (inputLists))
for (num, count) en countMap.iterentries ():
# los índices de matriz van 0 … N-1 pero tenemos 1 … N
salida [cuenta-1] .append (num)

# Salida de la frecuencia más alta a la más baja
para o en reversa (salida):
para num in o:
imprimir num

More Interesting

¿Qué algoritmo en aprendizaje automático es el más adecuado para unir los datos entrantes nuevos con los datos existentes en la base de datos SQLite?

¿Qué algoritmo debo usar para la generación de código para mi AST?

¿Cuáles son las aplicaciones de la lista de enlaces simple, doble, circular y de encabezado en la estructura de datos?

¿Cómo se siente cuando te das cuenta de que no eres realmente bueno en programación y algoritmos?

¿Por qué la clasificación de montón se considera un algoritmo in situ?

¿Utiliza el cerebro un proceso de recursión?

¿Qué significa "adherencia del brazo" en los algoritmos de programación de E / S?

¿Cuál sería un algoritmo eficiente para ordenar millones de líneas de cadenas / enteros en un archivo?

Cómo calcular coeficientes binomiales para números muy grandes

¿Puede la búsqueda de profundización iterativa encontrar una solución más rápida que A * en algunos casos?

¿Existe algún libro de estructuras de datos y algoritmos en C ++ (tiene código fuente completo en C ++) disponible de forma gratuita en Internet?

¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?

¿Cuáles son algunos problemas de práctica en la estructura de datos de árbol en sitios web competitivos?

Cómo agregar números de dos listas vinculadas

¿Qué estructuras de datos y algoritmos de programación heredados se enseñan en la universidad pero que no se usan después de la academia? ¿Aún debemos aprenderlos?