Wir haben eine Autovervollständigungsliste, die ausgefüllt wird, wenn Sie eine E-Mail an jemanden senden. Das ist alles gut und gut bis die Liste wirklich groß wird, müssen Sie mehr und mehr eine Adresse eingeben, um zu der gewünschten zu gelangen , was gegen den Zweck der automatischen Vervollständigung geht
Ich dachte, dass eine Logik hinzugefügt werden sollte, so dass die Ergebnisse der automatischen Vervollständigung nach einer Funktion der zuletzt kontaktierten oder am häufigsten kontaktierten statt nur alphabetischer Reihenfolge sortiert werden sollten.
Was ich wissen möchte, ist, ob es für diese Art von Suche bekannte Algorithmen gibt oder ob jemand irgendwelche Vorschläge hat.
Ich dachte nur an eine Punktesystem-Sache, mit etwas wie dem gleichen Tag ist 5 Punkte, die letzten drei Tage sind 4 Punkte, letzte Woche ist 3 Punkte, der letzte Monat ist 2 Punkte und die letzten 6 Monate ist 1 Punkt. Dann ist 25+ meistens 5 Punkte, 15+ ist 4, 10+ ist 3, 5+ ist 2, 2+ ist 1. Keine echte Logik außer diesen Zahlen "fühlt" sich richtig an.
Gibt es außer willkürlich gewählten Zahlen irgendeinen Input? Andere Zahlen auch willkommen, wenn Sie einen Grund geben können, warum Sie denken, dass sie besser sind als meins
Edit: Dies wäre in erster Linie in einem Geschäftsumfeld, in dem die Aktualität (yay for making words) oft genauso wichtig ist wie die Häufigkeit. Außerdem gibt es nach einem bestimmten Punkt wirklich keinen großen Unterschied mehr zwischen jemandem, mit dem man 80 Mal gesprochen hat, oder sagen wir mal 30 Mal.
Diese Art von Sache scheint ähnlich zu sein, was von Firefox getan wird, wenn es andeutet, was die Seite ist, für die Sie tippen.
Leider weiß ich nicht genau, wie Firefox es tut, Punkt-System scheint auch gut, vielleicht müssen Sie Ihre Punkte ausgleichen:)
Ich würde etwas Ähnliches wählen wie:
NoM = Anzahl der E-Mails
(NoM wurde heute an X gesendet) + 1/2 * (NoM wurde in der letzten Woche an X gesendet) / 7 + 1/3 * (NoM wurde im letzten Monat an X gesendet) / 30
Kontakte, die Sie im letzten Monat nicht geschrieben haben (es könnte geändert werden) haben 0 Punkte. Sie könnten anfangen, sie für NoM insgesamt zu sortieren (da es auf der Kontaktliste ist :). Diese werden nach Kontakten mit Punkten & gt; 0
Es ist nur eine Idee, trotzdem ist es wichtig, den meisten und nur per E-Mail verschickten Kontakten eine andere Bedeutung zu geben.
Sehen Sie sich selbstorganisierende Listen an.
Ein schnelles und schmutziges Aussehen:
Gehe zur Front Heuristik: Eine verknüpfte Liste, so dass jedes Mal, wenn ein Knoten ausgewählt wird, er an den Anfang der Liste verschoben wird.
Häufigkeit Heuristik: Eine verknüpfte Liste, so dass bei jeder Auswahl eines Knotens dessen Häufigkeitszählung inkrementiert wird und dann der Knoten in Richtung Vorderseite der Liste gesprudelt wird, so dass der am häufigsten aufgerufene Knoten am Anfang der Liste steht.
Es sieht so aus, als würde die Implementierung von "nach vorne" Ihren Anforderungen am besten entsprechen.
BEARBEITEN: Wenn eine Adresse ausgewählt ist, füge eins zu ihrer Frequenz hinzu und gehe zur Vorderseite der Knotengruppe mit der gleichen Gewichtung (oder (Gewichtung div x) für die Gruppierungen). Ich sehe Altern als ein echtes Problem bei der vorgeschlagenen Implementierung, da für jedes Element ein Gewicht berechnet werden muss. Eine selbstorganisierende Liste ist ein guter Weg zu gehen, aber der Algorithmus braucht ein paar Optimierungen, um das zu tun, was Sie wollen.
Weitere Bearbeitung: Alterung bedeutet, dass die Gewichte im Laufe der Zeit abnehmen, was bedeutet, dass Sie jedes Mal wissen müssen, wenn eine Adresse verwendet wurde. Das bedeutet, dass Sie beim Erstellen Ihrer Liste den gesamten E-Mail-Verlauf zur Verfügung haben müssen.
Das Problem ist, dass wir Berechnungen (außer der Suche) nur dann auf einem Knoten durchführen wollen, wenn tatsächlich auf sie zugegriffen wird. Dies gibt uns unsere statistisch gute Leistung.
Wenn Sie verrückt werden möchten, markieren Sie die aktivsten E-Mails auf verschiedene Arten:
Zeigen Sie dann die aktiven E-Mails am Anfang der Liste. Achte darauf, welche "Gruppe" dein Benutzer am meisten nutzt. Wechseln Sie zu dieser Sortierstrategie, nachdem genügend Daten gesammelt wurden.
Es ist viel Arbeit, aber eine Menge Spaß ...
Zählen Sie möglicherweise die Anzahl der an jede Adresse gesendeten E-Mails. Dann:
ORDER BY EmailCount DESC, Nachname, Vorname
Auf diese Weise stehen Ihre am häufigsten verwendeten Adressen an erster Stelle, auch wenn sie in ein paar Tagen noch nicht verwendet wurden.
Ich mag die Idee eines punktbasierten Systems mit Punkten für die aktuelle Nutzung, Nutzungshäufigkeit und möglicherweise anderen Faktoren (bevorzugen Sie Kontakte in der lokalen Domäne?).
Ich habe an einigen Systemen wie diesem gearbeitet, und weder "zuletzt verwendet" noch "am häufigsten verwendet" funktionieren sehr gut. Das "neueste" kann ein echter Schmerz sein, wenn Sie versehentlich versehentlich etwas falsch eingegeben haben. Alternativ entwickelt sich "most used" im Laufe der Zeit nicht viel, wenn Sie im letzten Jahr viel Kontakt mit jemandem hatten, aber jetzt hat sich beispielsweise Ihre Arbeit geändert.
Sobald Sie die gewünschte Anzahl an Messungen haben, können Sie eine interaktive Apoplikation erstellen, um verschiedene Gewichtungen zu testen und um zu sehen, welche die besten Ergebnisse für einige Beispieldaten liefern.
Dieses Dokument beschreibt eine Ein-Parameter-Familie von Cache-Räumungsrichtlinien, die enthält die zuletzt verwendeten und am seltensten verwendeten Richtlinien als Sonderfälle.
Der Parameter lambda liegt zwischen 0 und 1. Wenn Lambda 0 ist, verhält er sich genau wie ein LFU-Cache. Wenn Lambda 1 ist, verhält er sich genau wie ein LRU-Cache. Zwischen 0 und 1 kombiniert er auf natürliche Weise sowohl die Aktualität als auch die Häufigkeit.
Obwohl eine Antwort gewählt wurde, möchte ich meinen Ansatz zur Prüfung und Rückmeldung vorlegen.
Ich würde die Häufigkeit berücksichtigen, indem ich bei jeder Verwendung einen Zähler inkrementiere, aber um einen größeren Wert als 10 (um dem zweiten Punkt Genauigkeit hinzuzufügen).
Ich würde für die Aktualität verantwortlich sein, indem ich alle Zähler in regelmäßigen Intervallen (z. B. 24 Stunden) mit einem kleineren Faktor (z. B. 0,9) multipliziere.
Jede Verwendung:
%Vor%Jedes Intervall:
%Vor%Auf diese Weise reduziere ich sowohl die Häufigkeit als auch die Aktualität zu einem Feld, erübrige die Notwendigkeit, eine detaillierte Historie zu führen {letzter Tag, letzte Woche, letzter Monat} und halte die mathematische (meistens) Ganzzahl.
Die Schrittweite und der Verkleinerer müssten natürlich auf die Vorlieben eingestellt werden.
Tags und Links algorithm language-agnostic usability