Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Algorithm for most recently/often contacts for auto-complete?

We have an auto-complete list that's populated when an you send an email to someone, which is all well and good until the list gets really big you need to type more and more of an address to get to the one you want, which goes against the purpose of auto-complete

I was thinking that some logic should be added so that the auto-complete results should be sorted by some function of most recently contacted or most often contacted rather than just alphabetical order.

What I want to know is if there's any known good algorithms for this kind of search, or if anyone has any suggestions.

I was thinking just a point system thing, with something like same day is 5 points, last three days is 4 points, last week is 3 points, last month is 2 points and last 6 months is 1 point. Then for most often, 25+ is 5 points, 15+ is 4, 10+ is 3, 5+ is 2, 2+ is 1. No real logic other than those numbers "feel" about right.

Other than just arbitrarily picked numbers does anyone have any input? Other numbers also welcome if you can give a reason why you think they're better than mine

Edit: This would be primarily in a business environment where recentness (yay for making up words) is often just as important as frequency. Also, past a certain point there really isn't much difference between say someone you talked to 80 times vs say 30 times.

like image 872
Davy8 Avatar asked Oct 16 '08 18:10

Davy8


People also ask

What makes a good autocomplete algorithm?

Autocomplete functionality is commonly found on search engines and messaging apps. A good autocompleter must be fast and update the list of suggestions immediately after the user types the next letter. This blog post studies algorithms and data structures that are necessary for attaining a satisfactory speed.

How long should an autocomplete list be?

Keep the Autocomplete List Manageable The best practice is keeping your suggestions at 10 items or less (and this is why raking them correctly is essential). If your suggestion list is longer than that, a number of unpleasant things can happen: It makes the search time longer, as the user scrolls through them.

Who maintains the autocomplete list in outlook?

Outlook maintains the AutoComplete list. The list is used by both the automatic name-checking feature and the automatic completion feature. The AutoComplete list, also known as the nickname cache, is generated automatically when you send email messages from Outlook.

What is real-time autocomplete search?

Speed is Essential: Real-Time Autocomplete What is Autocomplete Search? Autocomplete is the function of search engines that displays keyword and product suggestions in real-time, based on what search query the user is typing into the search field.


2 Answers

Take a look at Self organizing lists.

A quick and dirty look:

Move to Front Heuristic: A linked list, Such that whenever a node is selected, it is moved to the front of the list.

Frequency Heuristic: A linked list, such that whenever a node is selected, its frequency count is incremented, and then the node is bubbled towards the front of the list, so that the most frequently accessed is at the head of the list.

It looks like the move to front implementation would best suit your needs.

EDIT: When an address is selected, add one to its frequency, and move to the front of the group of nodes with the same weight (or (weight div x) for courser groupings). I see aging as a real problem with your proposed implementation, in that it requires calculating a weight on each and every item. A self organizing list is a good way to go, but the algorithm needs a bit of tweaking to do what you want.

Further Edit: Aging refers to the fact that weights decrease over time, which means you need to know each and every time an address was used. Which means, that you have to have the entire email history available to you when you construct your list.

The issue is that we want to perform calculations (other than search) on a node only when it is actually accessed -- This gives us our statistical good performance.

like image 160
Chris Cudmore Avatar answered Nov 14 '22 22:11

Chris Cudmore


This kind of thing seems similar to what is done by firefox when hinting what is the site you are typing for.

Unfortunately I don't know exactly how firefox does it, point system seems good as well, maybe you'll need to balance your points :)

I'd go for something similar to:

NoM = Number of Mail

(NoM sent to X today) + 1/2 * (NoM sent to X during the last week)/7 + 1/3 * (NoM sent to X during the last month)/30

Contacts you did not write during the last month (it could be changed) will have 0 points. You could start sorting them for NoM sent in total (since it is on the contact list :). These will be showed after contacts with points > 0

It's just an idea, anyway it is to give different importance to the most and just mailed contacts.

like image 23
Andrea Ambu Avatar answered Nov 14 '22 22:11

Andrea Ambu