8

誰かに電子メールを送信すると入力されるオートコンプリート リストがあります。リストが非常に大きくなり、必要なアドレスにたどり着くためにアドレスをどんどん入力する必要があるまでは、これで問題ありません。オートコンプリートの目的に反する

オートコンプリートの結果を、アルファベット順だけでなく、最近連絡した機能または最も頻繁に連絡した機能でソートするように、いくつかのロジックを追加する必要があると考えていました。

私が知りたいのは、この種の検索に適した既知のアルゴリズムがあるかどうか、または提案があるかどうかです。

当日は5ポイント、過去3日間は4ポイント、先週は3ポイント、先月は2ポイント、過去6ヶ月は1ポイントのようなポイント制のことだけを考えていました。そして、ほとんどの場合、25+ は 5 ポイント、15+ は 4 ポイント、10+ は 3 ポイント、5+ は 2 ポイント、2+ は 1 ポイントです。

恣意的に選んだ数字以外に、誰かが何か入力していますか? 他の数値でも、私の数値よりも優れていると思う理由を教えていただければ歓迎します

編集: これは主に、最新性 (言葉を構成するためのイェーイ) が頻度と同じくらい重要であることが多いビジネス環境で使用されます。また、特定の時点を過ぎると、80回話し合った人と30回話したことに大きな違いはありません.

4

7 に答える 7

3

自己組織化リストを見てください。

すばやく汚い外観:

Move to Front Heuristic: ノードが選択されるたびにリストの先頭に移動されるような、リンクされたリスト。

頻度ヒューリスティック: リンクされたリスト。ノードが選択されるたびにその頻度カウントが増加し、ノードがリストの先頭に向かってバブリングされるため、最も頻繁にアクセスされるノードがリストの先頭に表示されます。

フロント実装への移行がニーズに最も適しているようです。

編集: アドレスが選択されたら、その頻度に 1 を追加し、同じ重みを持つノードのグループの前に移動します (または (重み div x) より粗いグループ化の場合)。提案された実装では、すべてのアイテムの重みを計算する必要があるという点で、老化が実際の問題であると思います。自己組織化リストは良い方法ですが、目的を達成するにはアルゴリズムを少し調整する必要があります。

さらに編集: エージングとは、重みが時間の経過とともに減少するという事実を指します。つまり、アドレスが使用されるたびに知る必要があります。つまり、リストを作成するときに、メール履歴全体を利用できるようにする必要があります。

問題は、ノードが実際にアクセスされたときにのみ、ノードで (検索以外の) 計算を実行したいということです。これにより、統計的に良好なパフォーマンスが得られます。

于 2008-10-16T19:05:58.807 に答える
2

この種のことは、入力しているサイトが何であるかを示唆するときにfirefoxが行うことと似ているようです.

残念ながら、私はFirefoxがどのようにそれを行うのか正確にはわかりません.ポイントシステムも同様に良いようです.ポイントのバランスをとる必要があるかもしれません:)

私は次のようなものに行きます:

NoM = メール数

(今日 X に送信された NoM) + 1/2 * (先週中に X に送信された NoM)/7 + 1/3 * (先月中に X に送信された NoM)/30

先月中に書き込まなかった連絡先 (変更される可能性があります) は 0 ポイントになります。合計で送信された NoM の並べ替えを開始できます (連絡先リストにあるため:)。これらは、ポイント > 0 との接触後に表示されます

とにかく、最も多くの連絡先とメールを送信したばかりの連絡先に異なる重要性を与えることです。

于 2008-10-16T19:15:54.543 に答える
2

夢中になりたい場合は、いくつかの方法のいずれかで最も「アクティブな」メールにマークを付けてください。

  • 最終アクセス
  • 使用頻度
  • 販売保留中の連絡先
  • 直属の上司

次に、アクティブなメールをリストの一番上に表示します。ユーザーが最もよく使用する「グループ」に注意してください。十分なデータが収集されたら、その並べ替え戦略にのみ切り替えます。

いろいろ大変だけど、なんか楽しい…。

于 2008-10-16T19:21:57.213 に答える
1

各アドレスに送信されたメールの数を数えてみてください。それで:

ORDER BY EmailCount DESC、LastName、FirstName

これにより、数日間使用されていない場合でも、最も頻繁に使用されるアドレスが最初に表示されます。

于 2008-10-16T19:05:13.910 に答える
1

最近の使用、使用頻度、およびその他の要因 (ローカル ドメインの連絡先を好むか?) のポイントを使用する、ポイント ベースのシステムのアイデアが気に入っています。

私はこのようないくつかのシステムに取り組んできましたが、「最近使用したもの」も「最も一般的に使用したもの」もうまく機能しません。「最新」は、誤って何かを一度タイプミスした場合、本当に苦痛になる可能性があります。あるいは、たとえば、昨年誰かと多くの接触があったが、現在は仕事が変わった場合、「最も使用されている」は時間の経過とともにあまり変化しません.

使用したい一連の測定値を取得したら、インタラクティブなアプリケーションを作成してさまざまな重みをテストし、サンプル データに対してどの重みが最良の結果をもたらすかを確認できます。

于 2008-10-16T19:55:02.623 に答える
0

回答が選択されたにもかかわらず、検討とフィードバックのために私のアプローチを提出したいと思います。

使用するたびにカウンターをインクリメントすることで頻度を考慮しますが、10 などの 1 より大きい値を使用します (2 番目のポイントに精度を追加するため)。

私は定期的な間隔 (たとえば 24 時間) ですべてのカウンターに減数 (たとえば 0.9)を掛けることで最新性を説明します。

各用途:

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

各間隔:

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

このようにして、頻度とリーセンシーの両方を 1 つのフィールドにまとめ、{先日、先週末、先月} を導出するために詳細な履歴を保持する必要をなくし、数学を (ほとんどの場合) 整数のままにします。

もちろん、増分と減量は好みに合わせて調整する必要があります。

于 2012-02-17T23:19:15.733 に答える
0

このホワイト ペーパーでは、特殊なケースとして、使用頻度が最も低いポリシーと使用頻度が最も低いポリシーを含む、キャッシュ削除ポリシーの単一パラメーター ファミリについて説明します。

パラメータ lambda の範囲は 0 から 1 です。lambda が 0 の場合は LFU キャッシュとまったく同じように動作し、lambda が 1 の場合は LRU キャッシュとまったく同じように動作します。0 から 1 の間で、最新性と頻度の両方の情報を自然な方法で組み合わせます。

于 2012-02-17T22:59:24.397 に答える