Algorithmus für die meisten vor kurzem / oft Kontakte für die automatische Vervollständigung?

StackOverflow https://stackoverflow.com/questions/209725

Frage

Wir haben eine Auto-Vervollständigen-Liste, die bevölkert ist, wenn ein Ihnen eine E-Mail an jemanden senden, die alle schön und gut, bis die Liste wirklich groß wird Sie brauchen mehr und mehr von einer Adresse eingeben, um einen bekommen Sie wollen , die gegen den Zweck der automatischen Vervollständigung geht

Ich dachte, dass einige Logik hinzugefügt werden soll, so dass die automatische Vervollständigung Ergebnisse sollten durch eine bestimmte Funktion der zuletzt in Kontakt gebracht oder am häufigsten kontaktiert nicht nur alphabetisch sortiert werden.

Was ich möchte wissen, ist, wenn es für diese Art der Suche alle bekannten guten Algorithmen ist, oder wenn jemand irgendwelche Vorschläge.

nur ein Punktesystem Sache, mit so etwas wie am selben Tag

Ich dachte, 5 Punkte, letzte drei Tage 4 Punkte sind, die letzte Woche ist 3 Punkte, im letzten Monat: 2 Punkte und letzten 6 Monate ist 1 Punkt. Dann meistens 25+ sind 5 Punkte, 15 + 4, 10 + 3, 5 + 2, 2 + 1 ist keine wirkliche Logik anders als jene Zahlen „fühlen“ ungefähr richtig.

Andere als nur Zahlen willkürlich ausgesucht hat jemand eine Eingabe? Andere Zahlen auch willkommen, wenn Sie einen Grund geben, warum Sie denken, sie sind besser als meine

Edit: Dies würde in erster Linie in einem geschäftlichen Umfeld, wo recent (yay für Worte bilden) oft als Frequenz genauso wichtig ist. Auch über einen gewissen Punkt gibt es wirklich nicht viel Unterschied zwischen sagen ist jemand, den Sie zu 80-mal gesprochen vs sagen 30mal.

War es hilfreich?

Lösung

Diese Art der Sache scheint ähnlich zu dem, was von Firefox getan wird, wenn anspielend, was die Website ist für Sie eingeben.

Leider weiß ich nicht genau, wie firefox tut es, Punkt-System als auch gut scheint, vielleicht müssen Sie Ihre Punkte balancieren:)

ich für etwas gehen würde ähnlich wie:

nom = Anzahl der E-Mail

(nom X heute gesendet) + 1/2 * (nom X während der letzten Woche gesendet) / 7 + 1/3 * (nom X während des letzten Monats gesendet) / 30

Kontakte Sie nicht während des letzten Monats schreiben (es könnte geändert werden) werden 0 Punkte haben. Sie könnten anfangen, sie für NoM gesendet insgesamt Sortierung (da es auf der Kontaktliste ist :). Diese werden zeigen nach Kontakte mit Punkten> 0

Es ist nur eine Idee, trotzdem ist es anders Bedeutung für die meisten und nur per Post Kontakte zu geben.

Andere Tipps

Schauen Sie sich auf Self Organizing-Listen.

A quick and dirty look:

In den Vordergrund Heuristic: Eine verkettete Liste ist, so dass immer dann, wenn ein Knoten ausgewählt wird, um es in der Vorderseite der Liste bewegt wird.

Frequenz Heuristic: Eine verkettete Liste ist, so dass immer dann, wenn ein Knoten ausgewählt wird, wird seine Frequenz Zähler erhöht, und dann wird der Knoten in Richtung der Vorderseite der Liste bläst, so dass die am häufigsten an der Spitze der Liste zugegriffen wird.

Es sieht aus wie der Umzug nach vorne Implementierung würde Ihren Bedürfnissen am besten gerecht wird.

EDIT: Wenn eine Adresse ausgewählt ist, fügt eine zu seiner Frequenz und auf den vor der Gruppe von Knoten, mit dem gleichen Gewicht (oder (Gewicht div x) für courser Gruppierungen) bewegen. Ich sehe Alter als ein echtes Problem mit dem vorgeschlagenen Implementierung, da es erfordert ein Gewicht auf jedem Punkt zu berechnen. Eine selbstorganisierende Liste ist ein guter Weg zu gehen, aber der Algorithmus braucht ein bisschen zwicken zu tun, was Sie wollen.

Weitere Edit: Alter beziehen sich auf die Tatsache, dass Gewichte im Laufe der Zeit verringern, was bedeutet, dass Sie jedes Mal eine Adresse verwendet wurde, kennen. Was bedeutet, dass Sie die gesamte E-Mail-Geschichte zur Verfügung haben, wenn Sie Ihre Liste erstellen.

Das Problem ist, dass wir Berechnungen (außer Suche) ausführen mögen auf einem Knoten nur dann, wenn es tatsächlich zugegriffen wird -. Dies gibt uns die statistische gute Leistung

Wenn Sie verrückt erhalten möchten, markieren Sie die meisten ‚aktiven‘ E-Mails in eine von mehreren Möglichkeiten:

  • Letzter Zugriff
  • Häufigkeit der Nutzung
  • Kontakte mit ausstehenden Verkäufen
  • Direkt Bosse
  • Etc

Dann präsentiert die aktiven E-Mails an der Spitze der Liste. Achten Sie darauf, auf die „Gruppe“ Ihre Benutzer verwenden die meisten. Wechseln Sie zu dieser Sortierstrategie ausschließlich nach genügend Daten gesammelt werden.

Es ist eine Menge Arbeit, aber irgendwie Spaß ...

Vielleicht die Anzahl der E-Mails an jede Adresse gesendet zählen. Dann gilt:

ORDER BY EmailCount DESC, Nachname, Vorname

Auf diese Weise Ihre am häufigsten häufig verwendeten Adressen kommen zuerst, auch wenn sie nicht in ein paar Tagen verwendet.

Ich mag die Idee von einem Punkt-basierten System mit Punkten für die letzten Einsatz, Nutzungshäufigkeit und möglicherweise andere Faktoren (bevorzugen Kontakte in der lokalen Domäne?).

Ich habe auf einigen Systemen wie dies funktioniert, und weder „zuletzt verwendeten“ noch „am häufigsten verwendeten“ sehr gut funktionieren. Die „jüngste“ kann einmal ein echten Schmerzen, wenn Sie versehentlich falsch Typen etwas sein. Alternativ „am häufigsten verwendete“ nicht viel im Laufe der Zeit entwickeln, wenn Sie viel Kontakt mit jemandem im vergangenen Jahr hatte, aber jetzt Ihre Arbeit hat sich verändert, zum Beispiel.

Wenn Sie den Satz von Messungen haben Sie verwenden möchten, können Sie eine interaktive apoplication erstellen unterschiedliche Gewichte zu testen und sehen, welche Ihnen die besten Ergebnisse für einige Beispieldaten.

Dieses Papier beschreibt eine Single-Parameter-Familie Räumungspolitik Cache, der zuletzt verwendete und am wenigsten häufig verwendete Richtlinien als Sonderfälle enthält.

Der Parameter, Lambda, im Bereich von 0 bis 1. Wenn Lambda-0 ist es führt genau wie ein LFU-Cache, wenn Lambda 1 es genau wie eine LRU-Cache durchführt. Zwischen 0 und 1 verbindet sowohl recency und Frequenzinformationen auf natürliche Weise.

Trotz einer Antwort gewählt wurde, mag ich zur Prüfung meinen Ansatz unterbreiten, und Feedback.

I würden für die Frequenz durch einen Zähler-Konto jeder Verwendung inkrementiert, aber in etwas größerem über einen Wert, wie 10 (Präzision zum zweiten Punkt hinzufügen).

ich für Aktualitäts erklären würde durch Multiplikation alle Zähler in regelmäßigen Abständen (etwa 24 Stunden) von einigen diminisher (etwa 0,9).

Jede Verwendung:

UPDATE `addresslist` SET `favor` = `favor` + 10 WHERE `address` = 'foo@bar.com'

Jedes Intervall:

UPDATE `addresslist` SET `favor` = FLOOR(`favor` * 0.9)

Auf diese Weise kollabieren ich sowohl Frequenz und Aktualitäts auf ein Feld, vermeiden die Notwendigkeit für eine ausführliche Geschichte zu halten {letzten Tag, letzte Woche, letzten Monat} abzuleiten und halten die Mathematik (meist) integer.

Der Zuwachs und diminisher müßten Vorlieben angepasst werden, natürlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top