3

システムのローカル ドライブ (例: c、d、e) に何百万ものファイルがあります。ファイルを検索するには、Windows の組み込みツールまたは Linux の「検索」などのコマンドを使用できます。最初にすべてのディレクトリをスキャンし、情報をファイルまたはDBに保存する独自の「検索」プログラムを設計したい場合。ファイルを検索するときはいつでも、まず DB またはファイルから情報をロードしてから検索する必要があります。

ディレクトリ構造を格納するために使用するデータ構造を決定するための提案が必要です。この構造は、特定のファイル名に対してロードおよびクエリできます。

検索はファイル名に基づいているため、キーがファイル名、値がフルパスになる Hashmap を使用することを考えました。Trie を使用すると、検索が遅くなります。別のアイデアは、逆インデックスを使用することです。しかし、どちらが優れているかはわかりません。

ありがとう。

4

2 に答える 2

0

メモリベースの構造 (通常のハッシュ テーブルなど) は使用できません。メモリ構造は検索には適していますが、1 つのレコードを検索するためだけにデータセット全体をメモリにロードする必要があります。非常に遅く、データセットが大きすぎてメモリに収まらない場合があります。

B-Tree や External Memory Hashmap などのディスクベースの構造を試すことをお勧めします。それらはディスク用に最適化されており、データセット全体をロードせずにレコードを検索できます。

ディスクベースの検索構造を自分で書きたくない場合は、Google の LevelDB を試してください。

于 2013-04-28T14:35:21.530 に答える
0

ハッシュテーブルは、検索用に O(1) (および挿入と削除も) を備えているため、これには非常に適しています。しかし問題は、ハッシュテーブルを使用して「範囲検索」を行うことができないことです。「範囲検索」は、「拡張子 cpp で終わるすべてのファイルを検索する」のようなものです。これが問題にならない場合は、ハッシュ テーブルを実装することをお勧めします。

于 2013-04-27T18:43:07.107 に答える