私はファイル〜1.5GBを持っています 私はこのファイルで30億のシーケンスを見つける必要があります。 1つのシーケンスは4または5バイトです。 最初の位置を見つけるか、ファイル内のそのようなシーケンス番号を確認してください。 最速の方法は?検索大きいファイルの4-5バイトシーケンス
コンピュータ上のRAMの制限 - 4ギガバイト
私はファイル〜1.5GBを持っています 私はこのファイルで30億のシーケンスを見つける必要があります。 1つのシーケンスは4または5バイトです。 最初の位置を見つけるか、ファイル内のそのようなシーケンス番号を確認してください。 最速の方法は?検索大きいファイルの4-5バイトシーケンス
コンピュータ上のRAMの制限 - 4ギガバイト
使用grep
。それは、大容量のファイルで物事を見つけるために高度に最適化されています。
これはオプションではない場合は、Boyer-Moore algorithmについて読んで、それを使用して自分で実装してください。同じ速度を再現するには多くの調整が必要ですgrep
があります。
前処理を使用してください。
Index
を作成して、ファイルを実行して、すべてのユニークな4バイトシーケンスの最初のインスタンスを記録する必要があると思います。バイトシーケンスでソートされた異なるファイルに4バイトシーケンスと最初に発生した位置を格納します。
インデックスファイルで簡単なバイナリ検索を使用すると、効率的にシーケンスを見つけることができます。
O(1)に検索を減らすために、より賢明でハッシュを使用できます。
Searchlight検索エンジンをチェックしてください。
このプログラムでは、最大10個のASCIIバイトの複数のシーケンスを1つのファイルに格納できます。ファイル、ディレクトリ、ファイル名のファイル、ディレクトリ名のファイル、ファイル名のarraylist、またはディレクトリ名のarraylistを指定すると、それは消え去ります!
さらに、検出された各シーケンスのファイルバイト位置/オフセットを報告します。
何よりも早くですか? – blueshift
シナリオをさらに展開することはできますか?約15億バイトの30億個のシーケンスはおそらく巨大な重なりを持っています。あなたはそれらの配列の位置を見つける必要がありますか?あるいは単にそれらが全く存在するかどうか? – deceze
最初のポジションを見つける – turbanoff