Question

Nous avons une liste à remplissage automatique qui est remplie lorsque vous envoyez un courrier électronique à quelqu'un, ce qui est très bien jusqu'à ce que la liste devienne vraiment grosse. Vous devez taper de plus en plus une adresse pour atteindre celle que vous voulez. , ce qui va à l’encontre de l’auto-complétion

Je pensais qu'une certaine logique devrait être ajoutée afin que les résultats de l'auto-complétion soient triés par une fonction du dernier contact ou du plus souvent contacté plutôt que par ordre alphabétique.

Ce que je veux savoir, c’est s’il existe de bons algorithmes connus pour ce type de recherche, ou si quelqu'un a des suggestions.

Je ne pensais qu’à un système de points: le même jour comptait 5 points, les trois derniers jours, 4 points, la semaine dernière, 3 points, le mois dernier, 2 points et les 6 derniers mois, 1 point. Ensuite, pour le plus souvent, 25+ correspond à 5 points, 15+ à 4, 10+ à 3, 5+ à 2, 2+ correspond à 1. Aucune logique réelle autre que ces chiffres "se sentir". à peu près correct.

À part des chiffres choisis arbitrairement, est-ce que quelqu'un a quelque chose à dire? Les autres chiffres sont également les bienvenus si vous pouvez donner une raison pour laquelle vous pensez qu'ils sont meilleurs que les miens

Modifier: ce serait principalement dans un environnement professionnel où la date récente (ouais pour composer des mots) est souvent aussi importante que la fréquence. En outre, passé un certain point, il n'y a pas beaucoup de différence entre, disons, quelqu'un à qui vous avez parlé 80 fois et 30 fois.

Était-ce utile?

La solution

Ce genre de chose semble similaire à ce que fait Firefox lorsque vous indiquez le site pour lequel vous tapez.

Malheureusement, je ne sais pas exactement comment firefox le fait, le système de points semble également bon, vous devrez peut-être équilibrer vos points:)

Je choisirais quelque chose de similaire à:

NoM = Nombre de courrier

(NoM envoyé à X aujourd'hui) + 1/2 * (NoM envoyé à X au cours de la dernière semaine) / 7 + 1/3 * (NoM envoyé à X au cours du dernier mois) / 30

Les contacts que vous n'avez pas écrits au cours du dernier mois (cela pourrait être changé) auront 0 points. Vous pouvez commencer à les trier pour NoM envoyé au total (puisqu'il figure dans la liste de contacts :). Celles-ci seront affichées après après des contacts avec des points > 0

C’est juste une idée, c’est de toute façon donner une importance différente aux contacts les plus envoyés et les plus simplement envoyés par la poste.

Autres conseils

Consultez les listes auto-organisées.

Un regard rapide et sale:

Heuristique Aller au premier plan: Une liste chaînée, telle que chaque fois qu’un noeud est sélectionné, il est placé au début de la liste.

Heuristique de fréquence: Une liste chaînée, telle que chaque fois qu'un nœud est sélectionné, son compte de fréquence est incrémenté, puis le nœud est projeté vers le début de la liste, de sorte que le plus fréquemment utilisé se trouve en tête de la liste.

Il semble que le passage à la mise en œuvre frontale conviendrait le mieux à vos besoins.

EDIT: Lorsqu'une adresse est sélectionnée, ajoutez-en une à sa fréquence et déplacez-vous à l'avant du groupe de nœuds ayant le même poids (ou (poids div x) pour les groupes de cours). Je considère le vieillissement comme un réel problème avec votre mise en œuvre proposée, dans la mesure où il nécessite de calculer un poids pour chaque élément. Une liste auto-organisée est un bon moyen d’aller, mais l’algorithme a besoin d’être légèrement modifié pour faire ce que vous voulez.

Plus loin Edit: Le vieillissement fait référence au fait que les poids diminuent avec le temps, ce qui signifie que vous devez savoir chaque fois qu'une adresse a été utilisée. Cela signifie que vous devez disposer de tout l'historique des e-mails lorsque vous construisez votre liste.

Le problème est que nous souhaitons effectuer des calculs (autres que la recherche) sur un nœud uniquement lorsque ce dernier est réellement utilisé - cela nous donne de bonnes performances statistiques.

Si vous voulez devenir fou, marquez les courriels les plus "actifs" de l'une des façons suivantes:

  • Dernier accès
  • Fréquence d'utilisation
  • Contacts avec ventes en attente
  • Chefs directs
  • Etc

Ensuite, présentez les courriels actifs en haut de la liste. Faites attention à quel "groupe" votre utilisateur utilise le plus. Basculez sur cette stratégie de tri exclusivement après la collecte d'un nombre suffisant de données.

C’est beaucoup de travail mais vraiment amusant ...

Peut-être compter le nombre de courriels envoyés à chaque adresse. Puis:

ORDER BY EmailCount DESC, Nom, Prénom

Ainsi, vos adresses les plus souvent utilisées sont prioritaires, même si elles ne sont pas utilisées depuis quelques jours.

J'aime l'idée d'un système basé sur des points, avec des points pour une utilisation récente, la fréquence d'utilisation et potentiellement d'autres facteurs (préférez-vous des contacts dans le domaine local?).

J'ai travaillé sur quelques systèmes tels que celui-ci, et aucun des "derniers utilisés" & ni " le plus couramment utilisé " fonctionne très bien. Le " plus récent " peut être une vraie douleur si vous tapez accidentellement quelque chose une fois. Alternativement, "le plus utilisé" n'évolue pas beaucoup avec le temps, si vous avez eu beaucoup de contacts avec quelqu'un l'année dernière, mais maintenant, votre travail a changé, par exemple.

Une fois que vous avez le jeu de mesures que vous souhaitez utiliser, vous pouvez créer une application interactive pour tester différents poids et voir ceux qui vous donnent les meilleurs résultats pour des exemples de données.

Ce document décrit une famille à un seul paramètre des stratégies d'éviction de cache incluant les stratégies les moins récemment utilisées et les moins fréquemment utilisées en tant que cas particuliers.

Le paramètre, lambda, va de 0 à 1. Lorsque lambda a la valeur 0, il fonctionne exactement comme un cache LFU. Lorsque lambda est 1, il fonctionne exactement comme un cache LRU. Entre 0 et 1, il combine les informations de récence et de fréquence de manière naturelle.

Bien qu’une réponse ait été choisie, je souhaite soumettre mon approche à la considération et à ses commentaires.

Je comptabiliserais la fréquence en incrémentant un compteur à chaque utilisation, mais avec une valeur supérieure à une, telle que 10 (pour ajouter de la précision au second point).

Je tiendrais compte de la récence en multipliant tous les compteurs à intervalles réguliers (par exemple, 24 heures) par un décroissant (par exemple, 0,9).

Chaque utilisation:

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

chaque intervalle:

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

De cette manière, je réduis la fréquence et la récence à un seul champ, évitant ainsi de conserver un historique détaillé pour dériver {dernier jour, la semaine dernière, le mois dernier} et conservant le nombre entier (généralement) mathématique.

L’incrément et le diminuant devraient bien sûr être ajustés selon vos préférences.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top