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.
- ¿Qué debo hacer en mis vacaciones de verano, dado que soy estudiante de informática (1er año)?
- ¿Dónde es útil el conocimiento de las estructuras de datos en Swift?
- ¿Por qué y cómo son importantes los algoritmos en nuestra vida diaria?
- ¿Cómo obtuvieron sus nombres los recorridos de árbol binario preorden, inorder y postorder?
- ¿Qué libro debo consultar para estructuras de datos en c ++?
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