約50,000語の英語の単語をメモリに保存する必要があり、メモリフットプリント(および読み込み速度)の観点から最適なデータ構造を知りたいです。トライでしょうか?どうすればファイルにシリアル化できますか?それより良いものはありますか?
基本的に、約50,000語がメモリにロードされたら、その語が存在するかどうかを確認するだけです。
約50,000語の英語の単語をメモリに保存する必要があり、メモリフットプリント(および読み込み速度)の観点から最適なデータ構造を知りたいです。トライでしょうか?どうすればファイルにシリアル化できますか?それより良いものはありますか?
基本的に、約50,000語がメモリにロードされたら、その語が存在するかどうかを確認するだけです。
さて、あなたが提供したガイドラインによれば、単純なList
方が良いでしょう。
フェッチ時間は明らかにaTrie
またはよりも遅くなりますDictionary
が、
「メモリフットプリント(および読み込み速度)の観点から」
必要なメモリオーバーヘッドはごくわずかで、読み込みも速くなります(インデックス/プレフィックスデータ構造が構築されていないため)。
メモリ比較の詳細については、このブログ投稿を参照してください(JavaScriptの場合ですが、引き続き適用されます)。
この回答によると、必要なものはDictionaryクラスです。MSDN のドキュメントに従って、TryGetValueメソッドを使用してデータにアクセスする必要があります。
コードがディクショナリにないキーに頻繁にアクセスしようとする場合は、TryGetValue メソッドを使用します。このメソッドを使用すると、Item プロパティによってスローされた KeyNotFoundException をキャッチするよりも効率的です。
はい、これには試してみても問題ありません。シリアル化するには、次の 2 つのオプションがあります。
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