Domanda

Abbiamo un elenco di completamento automatico che viene compilato quando invii un'email a qualcuno, il che va bene fino a quando l'elenco non diventa davvero grande, devi digitare sempre più indirizzi per arrivare a quello che desideri , che va contro lo scopo del completamento automatico

Stavo pensando che una logica doveva essere aggiunta in modo che i risultati del completamento automatico dovessero essere ordinati in base a una funzione dell'ultimo contatto contattato o contattato più spesso piuttosto che solo in ordine alfabetico.

Quello che voglio sapere è se esistono algoritmi noti per questo tipo di ricerca o se qualcuno ha qualche suggerimento.

Stavo pensando solo a un sistema di punti, con qualcosa come lo stesso giorno è 5 punti, gli ultimi tre giorni sono 4 punti, la scorsa settimana è 3 punti, l'ultimo mese è 2 punti e gli ultimi 6 mesi sono 1 punto. Quindi per la maggior parte delle volte, 25+ è 5 punti, 15+ è 4, 10+ è 3, 5+ è 2, 2+ è 1. Nessuna logica reale se non quella di quei numeri "sentire". a destra.

Oltre ai numeri scelti in modo arbitrario qualcuno ha qualche input? Anche altri numeri sono ben accetti se puoi dare una ragione per cui pensi che siano migliori dei miei

Modifica: questo sarebbe principalmente in un ambiente aziendale in cui la recente (yay per inventare le parole) è spesso importante quanto la frequenza. Inoltre, oltre un certo punto non c'è davvero molta differenza tra dire a qualcuno con cui hai parlato 80 volte contro 30 volte.

È stato utile?

Soluzione

Questo genere di cose sembra simile a quello che viene fatto da Firefox quando accenni al sito per cui stai digitando.

Sfortunatamente non so esattamente come funziona Firefox, anche il sistema a punti sembra buono, forse dovrai bilanciare i tuoi punti :)

Vorrei qualcosa di simile a:

NoM = Numero di messaggi

(NoM inviato a X oggi) + 1/2 * (NoM inviato a X durante l'ultima settimana) / 7 + 1/3 * (NoM inviato a X durante l'ultimo mese) / 30

I contatti che non hai scritto durante l'ultimo mese (potrebbe essere cambiato) avranno 0 punti. Potresti iniziare a ordinarli per NoM inviato in totale (poiché è nell'elenco dei contatti :). Questi verranno mostrati dopo contatti con punti > 0

È solo un'idea, comunque è di dare diversa importanza ai contatti più e solo inviati per posta.

Altri suggerimenti

Dai un'occhiata alle liste di auto-organizzazione.

Uno sguardo veloce e sporco:

Sposta in euristica frontale: Un elenco collegato, tale che ogni volta che un nodo viene selezionato, viene spostato in primo piano nell'elenco.

Euristica di frequenza: Un elenco collegato, in modo tale che ogni volta che viene selezionato un nodo, il suo conteggio delle frequenze viene incrementato e quindi il nodo viene gorgogliato verso la parte anteriore dell'elenco, in modo che l'accesso più frequente sia all'inizio della lista.

Sembra che il passaggio all'implementazione del fronte si adatti meglio alle tue esigenze.

MODIFICA: quando si seleziona un indirizzo, aggiungerne uno alla sua frequenza e spostarsi nella parte anteriore del gruppo di nodi con lo stesso peso (o (peso div x) per i raggruppamenti di cursori). Vedo l'invecchiamento come un vero problema con l'implementazione proposta, in quanto richiede il calcolo di un peso su ogni singolo articolo. Un elenco auto-organizzato è una buona strada da percorrere, ma l'algoritmo ha bisogno di un po 'di modifiche per fare quello che vuoi.

Ulteriore modifica: L'invecchiamento si riferisce al fatto che i pesi diminuiscono nel tempo, il che significa che è necessario conoscere ogni volta che è stato utilizzato un indirizzo. Ciò significa che devi avere l'intera cronologia email a tua disposizione quando costruisci il tuo elenco.

Il problema è che vogliamo eseguire calcoli (diversi dalla ricerca) su un nodo solo quando vi si accede effettivamente - Questo ci dà le nostre buone prestazioni statistiche.

Se vuoi impazzire, segna le e-mail più "attive" in uno dei diversi modi:

  • Ultimo accesso
  • Frequenza d'uso
  • Contatti con vendite in sospeso
  • Boss diretti
  • Etc

Quindi, presenta le e-mail attive in cima all'elenco. Fai attenzione a quale "gruppo" il tuo utente usa di più. Passa a quella strategia di ordinamento esclusivamente dopo che sono stati raccolti dati sufficienti.

È un sacco di lavoro ma divertente ...

Forse conta il numero di email inviate a ciascun indirizzo. Poi:

ORDINA PER EmailCount DESC, Cognome, Nome

In questo modo, i tuoi indirizzi più utilizzati vengono prima di tutto, anche se non sono stati utilizzati da alcuni giorni.

Mi piace l'idea di un sistema basato su punti, con punti per uso recente, frequenza d'uso e potenzialmente altri fattori (preferisci i contatti nel dominio locale?).

Ho lavorato su alcuni sistemi come questo, e nessuno dei due è stato utilizzato più di recente. né "più comunemente usato" funziona molto bene. Il "più recente" può essere un vero dolore se si digita accidentalmente qualcosa una volta. In alternativa, "più usato" non si evolve molto nel tempo, se hai avuto molti contatti con qualcuno l'anno scorso, ma ora il tuo lavoro è cambiato, per esempio.

Una volta ottenuta la serie di misurazioni che si desidera utilizzare, è possibile creare un'apoplicazione interattiva per testare pesi diversi e vedere quali offrono i risultati migliori per alcuni dati di esempio.

Questo documento descrive una famiglia a parametro singolo delle politiche di eliminazione della cache che includono le politiche utilizzate meno di recente e utilizzate meno frequentemente come casi speciali.

Il parametro, lambda, va da 0 a 1. Quando lambda è 0, funziona esattamente come una cache LFU, quando lambda è 1, funziona esattamente come una cache LRU. Tra 0 e 1 combina le informazioni di recency e frequenza in modo naturale.

Nonostante sia stata scelta una risposta, voglio sottoporre il mio approccio alla considerazione e al feedback.

Vorrei rendere conto della frequenza incrementando un contatore ogni utilizzo, ma di un valore maggiore di uno, come 10 (per aggiungere precisione al secondo punto).

Vorrei rendere conto della recency moltiplicando tutti i contatori a intervalli regolari (diciamo, 24 ore) per alcuni diminuitori (diciamo, 0.9).

Ogni utilizzo:

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

Ogni intervallo:

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

In questo modo comprendo sia la frequenza che la recency in un campo, evito la necessità di mantenere una cronologia dettagliata per derivare {ultimo giorno, settimana scorsa, mese scorso} e mantenere integer la matematica (principalmente).

L'incremento e il decremento dovrebbero essere adeguati alle preferenze, ovviamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top