2016-04-05 6 views
1

問題:テキスト行にテキストが多数含まれています。これでユーザーはいくつかの文字を入力し、与えられたファイル内のテキストに基づいて提案を自動補完する必要があります。 ファイルにcomputer science is fun. computer engineering is awesomeが含まれているとします。 ユーザーがcomと入力した場合、提案としてcomputer sciencecomputer engineeringとする必要があります。ユーザーがisと入力した場合、提案はfunawesomeである必要があります。ユーザは、テキストファイル内にあるかもしれない単語を入力することができる。単語がファイルにない場合は、提案はありません。テキストファイルからの単語候補のデータ構造

この問題の最適なデータ構造は何でしょうか。
私はトライを作ることができると知っていますが、ユーザーがcomと入力すると、computerしか提案できないことがあります。

ありがとうございました。

+0

質問はどのようなデータ構造ではなく、データのモデリング方法です。この問題を解決するために、文字nGramモデルを構築することができます。 – gidim

+0

あなたのトライは単一の言葉ではなく、 –

答えて

1

準備:

  1. ソート辞書的にこの配列

クエリ文字列

  • の配列として、テキストファイルのすべての行を読む:

    1. lower boundインデックスを取得します。入力文字列:first
    2. 入力文字列の最後の文字の値を1(最大値でない場合)に増やし、この新しい入力文字列ののインデックスlower boundを取得します。最後の文字を増やせない場合は、arrrayの終わりを過ぎたインデックスを使用してください。 [first, last)

    すべての可能な提案が最後のインデックスを含まないこれらの2つの境界の間にソートされた配列です。

    提案が多すぎる場合は、3つの短い提案を提案するか、統計的な頻度で並べ替えるだけでフィルタリングできます。

    提案の数を提案する代わりに印刷することもできます。 googleがあなたのクエリと一致するページの数を示す方法と同様です。そして、マッチの数があなたのUIによって管理可能な場合にのみ、文字列を提案します。

  • +0

    これはいいようですが、ユーザが 'i​​s'と入力した場合、その提案は' fun'と 'awesome'でなければなりません。それがこの解決策ではうまくいくとは思わないでください。 –

    +0

    @KaushalShahあなたはあなたの質問でそれを指定していません:) – fjardon

    +0

    質問を編集しました、もっと明確になるはずです –

    関連する問題