0

私は現在、プレイヤーが作成した単語が正しいかどうかを確認するためにいくつかのスペル チェック メソッドを必要とする Java で書かれた Android 単語ゲームを開発しています。正しい単語 (ポーランド語) の完全なリストがテキスト ファイル (*.txt) に保存されていますが、300 万近くの単語が含まれており、サイズが 35 MB もある巨大なファイルです。いくつかの調査を行ったところ、このデータを保持するための最適な構造は三分探索ツリーであることがわかりました。これは、スペースと時間の効率が良いからです。

私の質問は、ランタイムの前に巨大なテキスト ファイルから三項探索ツリー構造を作成する方法です。時間がかかり、メモリが不足するため、ランタイム中に実行することはできません(どのようにクラッシュするかという好奇心からすでに試しました)。したがって、コンパイル前でもそのような構造を作成し、ある種のリソースとしてプロジェクトに追加するのが最善の方法だと思いますが、残念ながらその方法がわかりません。コンパイル時間の前にそれを達成できない場合、コンパイル中にそのような構造を作成する方法を知っているでしょうか?

詳細:

  • このテキスト ファイルを辞書として使用したいので、他の辞書サービスの使用を勧めないでください。
  • このデータ構造に対して実行する必要がある唯一の方法
    boolean contains(String word)は、単語が正しいかどうかを教えてくれることです。
4

1 に答える 1

0

必要な.contains(String word)ものが 35 MB だけの場合は、HashSetを お勧めしHashSet<String>ます。これは辞書とまったく同じように機能し、文字列は最初から適切にハッシュ可能であるため、ビルドも非常に高速です。これcontains(word)は、O(1) パフォーマンスを備えたセットの組み込みメソッドでもあります。

実行時にディクショナリを作成したくない場合は、データベースに 1 回 (アプリの初回実行時) ダンプし、将来はそれを読み取ることができます。

編集: Android アプリに最大メモリ制限があることを知りませんでした。非常に効率的に読み書きできるデータベース (単なるファイル) にファイル全体をダンプすることで、これを回避できます。Android サンプルを確認してください。Eclipse があり、サンプルが Android SDK マネージャーからインストールされている場合は、新しいプロジェクト (Android サンプル) を開始できます。そこから Searchable Dictionary サンプルを選択し、ソースを見て、.txt ファイルからデータベースを作成する方法を確認します。上記のリンクには、サンプルのインストールに関する完全な手順が含まれています。Android データベース (SQLite) は、明らかに 1 TB までのデータベースをサポートしているので、問題ないはずです。

于 2013-10-01T12:35:57.177 に答える