No creo que requiera un algoritmo muy complejo per se, pero sí necesita un pensamiento inteligente. Todo lo que necesita es una estructura de datos similar a un caché LRU junto con (muchas) modificaciones.
Así es como probablemente funcionan los emoticonos utilizados recientemente por WhatsApp:
- Cada smiley cuando se envía, se agrega al caché si aún no existe en el caché.
- A cada carita sonriente ingresada se le asigna un puntaje, por ejemplo, algún número. Este número determina su vida útil en la Lista de uso reciente (RUL). Cuando este número alcanza un umbral mínimo (cero, por ejemplo), se elimina de la lista.
- Cuando se vuelve a enviar un smiley que ya está presente en el RUL, su puntaje se incrementa en algún valor (uno, por ejemplo) y el puntaje de otros smileys en el RUL disminuye en ese mismo valor. *
- A cada nuevo smiley ** se le asigna un puntaje que es sustancialmente más alto que el umbral mínimo.
Tenga en cuenta que lo que he descrito puede hacer que el problema sea trivial o demasiado complejo. Esta respuesta tal vez sea incorrecta.
- ¿Qué significan términos como inicialización, evaluación, selección, cruce, mutación en el contexto de algoritmos genéticos?
- Sea X la solución del costo O (n ^ k) para un problema Q en NP-c. ¿Implicaría que existe una solución de costo O (n ^ k) para todos los problemas Q 'en NP-c?
- Cómo verificar si existe una ruta simple entre los nodos a y b de modo que pase a través del nodo c
- ¿Cómo podemos demostrar que el reconocimiento de objetos basado en la visión es un problema np completo?
- ¿Qué es un algoritmo para generar una lista de secuencias numéricas que consta de cinco números (00-99) de modo que cada número en una secuencia siempre ocurra en combinación ÚNICA con los otros números y no haya secuencias duplicadas?
* – También podría disminuir el puntaje de los emoticones que no sean el actual.
** – nuevo como en, nuevo en el RUL y no en la lista de emojis utilizables (aunque ambos podrían superponerse)
PS Podría hacer una implementación simple si tengo tiempo.