2008-09-16 11 views
3

文字列の登録と登録解除を可能にするシンプルなクラス(Java)を実装したいと思います。現在の文字列セットに基づいて、指定された文字列を自動完成します。だから、インターフェースは次のようになります。シンプルな自動補完機能を実装するにはどうすればよいですか?

  • ボイドが追加(文字列)
  • 無効のremove(String)を
  • 完全な文字列(String)を

の面でこれを行うための最善の方法は何アルゴリズムとデータ構造?

+0

complete()が曖昧な場合はどうなりますか? – maccullt

+0

complete()は、あいまいさが始まる(つまり、登録された文字列を返しませんが、一部の登録された文字列の共通接頭辞を返す)という意味では曖昧ではありません。登録された文字列のリストを返す方法もあります。 – Kaarel

答えて

4

で素晴らしいJavaWorldの例があります。 Googleで「パトリシア・トライ」の、あなたは多くの情報を見つけることができます検索...この質問つまずく人のために

+0

素晴らしい提案、私はパトリシアトライを聞いたことがない。確かに私はいくつかのより多くの研究をするつもりです – Aidos

+1

答えをありがとう。私はこの基盤ツリーのJava実装を使用して終了しました:http://code.google.com/p/radixtree/ – Kaarel

-2

正規表現。

0

ソートされた順序で維持できる何らかの種類のリストでなければなりません。また、リスト内の検索パターンに一致する最初の要素のインデックスを与える独自の検索アルゴリズムを作成する必要があります。次に、そのインデックスから、一致しない最初の要素まで繰り返し、可能な補完のリストを取得します。

私はコモンズコレクションからTreeListを見ています。並べ替えの順序を維持するために、リストの途中から挿入や削除を高速に実行できます。おそらく、そのリストを裏付けるツリーから検索機能を書くのはかなり簡単でしょう。

3

あなたの後にあるデータ構造は、ターナリ検索ツリーと呼ばれます。

あなたがデータ構造のためのパトリシア・トライを使用することを検討すべきであるwww.javaworld.com/javaworld/jw-02-2001/jw-0216-ternary.html

0

...

私はGoogle Codeの上server-side autocomplete implementationを掲載。このプロジェクトには、既存のアプリケーションとスタンドアロンのHTTP AJAXオートコンプリート・サーバーに統合できるJavaライブラリが含まれています。

私の希望は、効率的なオートコンプリートをアプリケーションに組み込むことができるということです。タイヤをキック!

関連する問題