19

ディスク上のファイルに個別のチェーンを持つハッシュテーブルを保存するにはどうすればよいですか?

実行時にハッシュテーブルに格納されたデータを生成するのはコストがかかるため、ディスクからHTをロードする方が高速です...その方法を理解できれば。

編集:ルックアップは、メモリにロードされたHTを使用して実行されます。ハッシュテーブル(メモリ内)をバイナリ形式のファイルに保存する方法を見つける必要があります。そのため、次回プログラムを実行するときに、HTをディスクからRAMにロードするだけで済みます。

私はC++を使用しています。

4

6 に答える 6

6

どの言語を使用していますか?一般的な方法は、ある種のバイナリシリアル化を行うことです。

わかりました。言語を追加するために編集したようです。C ++の場合、いくつかのオプションがあります。Boostシリアル化メカニズムはかなり良いと思います。さらに、Boostのシリアル化ライブラリのページにも代替案が記載されています。リンクは次のとおりです。

http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/index.html

于 2009-02-07T18:57:07.783 に答える
5

C / C ++の仮定:ポインターと可変長の割り当ての代わりに、配列インデックスと固定サイズの構造体を使用します。後でread()するために、データ構造をファイルに直接write()できるはずです。

より高いレベルの場合:多くの高言語APIにはシリアル化機能があります。JavaとQt/C ++にはどちらもすぐに頭に浮かぶメソッドがあるので、他の人もそうしていることを私は知っています。

于 2009-02-07T19:02:33.357 に答える
5

シリアライゼーションを使用して、データ構造全体を直接ディスクに書き込むことができます (たとえばJava で)。ただし、オブジェクトの要素にアクセスするために、オブジェクト全体をメモリに読み戻さなければならない場合があります。これが実用的でない場合は、ランダム アクセスファイルを使用してハッシュ テーブルの要素を格納することを検討できます。ポインターを使用してチェーン内の次の要素を表す代わりに、ファイル内のバイト位置を使用するだけです。

于 2009-02-07T19:06:37.420 に答える
2

おそらくDBMがあなたに役立つかもしれません。

于 2009-02-07T19:05:58.967 に答える
1

ハッシュ テーブルの実装が適切である場合は、ハッシュと各オブジェクトのデータを保存するだけです。オブジェクトをテーブルに配置しても、ハッシュを考えると高価ではありません。テーブルまたはチェーンを直接シリアル化しないと、保存間で正確な実装を変更できます。ロードします。

于 2009-02-07T20:05:31.547 に答える