How would one implement a Frequently Used algorithm?
You are running into a situation where the task is not "here is a specification of what constitutes a good value, find the best one", but "find a result that is as useful as possible to the user, with no clear specification what 'useful' means". 

It's a difficult problem. You can't even ask the users what they think is most useful - because they don't know, and even if they have an opinion what they think is most useful, that doesn't necessarily agree with reality. 

You might also consider that changing the set of emojis is of slight negative value because it's harder to find one if the set is changing. On the other hand, emojis that are easy to find anyway (for example smileys that come first in the ordinary list) are less useful. And you might consider context, a user might use different emojis depending who is going to receive the message. Imagine the software knows the receiver, and knows it is their birthday, and suddenly the set of "most useful" emojis totally changes. 

I'm not sure if I would count this under "algorithm", because the real problem is not the algorithm, but producing heuristics what makes a good set of useful items.