Pergunta

Temos uma lista de preenchimento automático que está preenchida quando um você envia um e-mail para alguém, que é tudo muito bem, até que a lista fica muito grande você precisa digitar mais de um endereço para chegar ao que você quer , o que vai contra o propósito de auto-complete

Eu estava pensando que alguma lógica deve ser adicionado para que os resultados de auto-completar devem ser classificados por alguma função de mais recentemente contactado ou mais frequentemente contactado em vez de justa ordem alfabética.

O que eu quero saber é se há quaisquer algoritmos bons conhecidos para este tipo de pesquisa, ou se alguém tiver alguma sugestão.

Eu estava pensando apenas uma coisa sistema de pontos, com algo como mesmo dia é de 5 pontos, três últimos dias é de 4 pontos, na semana passada é de 3 pontos, no mês passado é de 2 pontos e últimos 6 meses é de 1 ponto. Em seguida, para a maioria das vezes, 25+ é de 5 pontos, 15+ é 4, 10+ é 3, 5+ é 2, 2+ é 1. Nenhuma lógica verdadeira excepção esses números "sensação" sobre a direita.

Além de números apenas arbitrariamente escolhidos alguém tem alguma entrada? Outros números também bem-vindos, se você pode dar uma razão por que você acha que é melhor do que o meu

Edit: Isso seria principalmente em um ambiente de negócios onde recentness (yay para confecção de palavras) é muitas vezes tão importante quanto a freqüência. Além disso, passado um certo ponto não há realmente muita diferença entre dizer a alguém que você falou 80 vezes vs digamos 30 vezes.

Foi útil?

Solução

Esse tipo de coisa parece semelhante ao que é feito por firefox quando insinuando que é o site que você está digitando para.

Infelizmente eu não sei exatamente como firefox faz isso, o sistema de ponto parece bom, bem, talvez você precisa equilibrar seus pontos:)

Eu iria para algo semelhante a:

nom = Número de Correio

(NOM enviado para X hoje) + 1/2 * (NOM enviado para X durante a última semana) / 7 + 1/3 * (NOM enviado para X durante o último mês) / 30

Contatos você não escreveu durante o último mês (pode ser alterado) terá 0 pontos. Você poderia começar classificando-os para nom enviou no total (já que é na lista de contatos :). Estes serão mostrou após contatos com pontos> 0

É apenas uma idéia, de qualquer maneira é dar importância diferente para os contatos mais e apenas enviados.

Outras dicas

Dê uma olhada em auto listas de organização.

Um olhar rápido e sujo:

Mover para Frente Heurística: Uma lista ligada, de modo que sempre que um nó é selecionado, ele é movido para a frente da lista.

Frequency Heurística: Uma lista ligada, de modo que sempre que um nó é selecionado, sua contagem de freqüência é incrementado, e depois o nó é borbulhado para a frente da lista, de modo que o mais frequentemente acessados ??está no topo da lista.

Parece que a mudança para a implementação frente seria melhor se adequar às suas necessidades.

EDIT: Quando um endereço é selecionado, adicionar um para a sua frequência, e passar para a frente do grupo de nós com o mesmo peso (ou (div x) de peso para agrupamentos courser). I ver o envelhecimento como um problema real com a sua implementação proposta, na medida em que requer o cálculo de um peso em cada item. A lista de auto-organização é um bom caminho a percorrer, mas o algoritmo precisa de um pouco de ajustes para fazer o que quiser.

Além disso Edit: Envelhecimento refere-se ao fato de que os pesos diminuir ao longo do tempo, o que significa que você precisa saber cada vez que foi usado um endereço. O que significa que você tem que ter toda a história e-mail disponível para você quando você construir sua lista.

O problema é que nós queremos realizar cálculos (com excepção de busca) em um nó apenas quando é realmente acessado -. Isso nos dá o nosso desempenho estatístico boa

Se você quiser ficar louco, marque os e-mails a maioria dos 'ativos' em uma das várias maneiras:

  • Última acesso
  • Frequência de utilização
  • Os contatos com as vendas pendentes
  • chefes diretos
  • Etc

Em seguida, apresentar os e-mails ativos no topo da lista. Preste atenção ao que "grupo" seu usuário usa mais. Mudar para que a estratégia de classificação exclusivamente após dados suficientes forem coletados.

É um monte de trabalho, mas tipo de diversão ...

Talvez contar o número de e-mails enviados a cada endereço. Então:

ORDER BY EmailCount DESC, Sobrenome, Nome

Dessa forma, seus endereços mais frequentemente usados ??vêm em primeiro lugar, mesmo que não tenham sido utilizados em poucos dias.

Eu gosto da idéia de um sistema baseado em pontos, com pontos de uso recente, frequência de uso, e, potencialmente, outros fatores (preferem contatos no domínio local?).

Eu trabalhei em alguns sistemas como este, e nem "mais recentemente utilizado" nem "mais comumente usado" trabalho muito bem. O "mais recente" pode ser uma verdadeira dor se você acidentalmente mis-tipo algo uma vez. Alternativamente, "mais utilizado" não evolui muito ao longo do tempo, se você tinha um monte de contato com alguém no ano passado, mas agora o seu trabalho mudou, por exemplo.

Depois de ter o conjunto de medidas que você deseja usar, você pode criar um apoplication interativo para testar diferentes pesos, e ver qual deles lhe dar os melhores resultados para alguns dados da amostra.

Este artigo descreve uma família de parâmetro único de políticas de despejo de cache que inclui políticas menos utilizados recentemente e menos frequentemente utilizados como casos especiais.

O parâmetro, lambda, varia de 0 a 1. Quando lambda é 0 ele executa exatamente como um cache LFU, quando lambda é 1 ele executa exatamente como um cache LRU. Entre 0 e 1 que combina informações de recência e frequência de uma forma natural.

Apesar de uma resposta ter sido escolhido, quero apresentar a minha abordagem para análise e feedback.

Eu seria responsável por frequência incrementando um contador de cada utilização, mas por alguns maior do que a um valor, como 10 (Para adicionar precisão para o segundo ponto).

Eu seria responsável por recência multiplicando todas contadores em intervalos regulares (por exemplo, 24 horas) por alguns diminuidor (digamos, 0,9).

Cada uso:

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

Cada intervalo:

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

Desta forma, eu colapso freqüência e recência para um campo, evitar a necessidade de manter um histórico detalhado para derivar {último dia, na semana passada, no mês passado} e manter a matemática (principalmente) inteiro.

O incremento e diminuidor teria que ser ajustado à preferência, é claro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top