¿Qué algoritmo posible utiliza WhatsApp para determinar los emoticonos utilizados recientemente?

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:

  1. Cada smiley cuando se envía, se agrega al caché si aún no existe en el caché.
  2. 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.
  3. 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. *
  4. 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.


* – 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.