1

約50,000語の英語の単語をメモリに保存する必要があり、メモリフットプリント(および読み込み速度)の観点から最適なデータ構造を知りたいです。トライでしょうか?どうすればファイルにシリアル化できますか?それより良いものはありますか?

基本的に、約50,000語がメモリにロードされたら、その語が存在するかどうかを確認するだけです。

4

4 に答える 4

1

さて、あなたが提供したガイドラインによれば、単純なList方が良いでしょう。

フェッチ時間は明らかにaTrieまたはよりも遅くなりますDictionaryが、

「メモリフットプリント(および読み込み速度)の観点から」

必要なメモリオーバーヘッドはごくわずかで、読み込みも速くなります(インデックス/プレフィックスデータ構造が構築されていないため)。

メモリ比較の詳細については、このブログ投稿を参照してください(JavaScriptの場合ですが、引き続き適用されます)。

于 2012-04-30T06:52:37.397 に答える
0

この回答によると、必要なものはDictionaryクラスです。MSDN のドキュメントに従って、TryGetValueメソッドを使用してデータにアクセスする必要があります。

コードがディクショナリにないキーに頻繁にアクセスしようとする場合は、TryGetValue メソッドを使用します。このメソッドを使用すると、Item プロパティによってスローされた KeyNotFoundException をキャッチするよりも効率的です。

于 2012-04-30T06:12:07.667 に答える
0

はい、これには試してみても問題ありません。シリアル化するには、次の 2 つのオプションがあります。

  1. 元の単語リストを使用して、トライを再構築します。十分に速いはずですが、プロファイリングすることをお勧めします。
  2. タイプに通常の .NET シリアル化を使用し、ファイルにダンプするだけです。ただし、これにより、他の言語のプログラムがそれを読み取ることができなくなります。
于 2012-04-30T06:23:57.603 に答える
0

Dictionary オブジェクトが提案されています。これらを読んでください:

読み取り専用ディクショナリ アクセス用の最も効率的なインメモリ データ構造

ハッシュテーブルより辞書が好まれるのはなぜですか?

実装に関するヘルプについては、次をお読みください。

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

ディクショナリ オブジェクトまたはハッシュ テーブルをシリアル化するには、次のリファレンスを参照してください。

http://blogs.msdn.com/b/adam/archive/2010/09/10/how-to-serialize-a-dictionary-or-hashtable-in-c.aspx

于 2012-04-30T06:13:52.887 に答える