log4cpp 形式で書き込まれたログ ファイルがいくつかあります。
--log4cpp の性質上、このファイルは各行の先頭が日時でソートされます。
フォーマットが似ていると仮定すると
2012-09-02 17:17:36.891 This is line 1 in file 2
...
2013-08-05 14:17:35.344 This is line 607082 in file 2
2013-08-05 14:17:36.891 This is line 607083 in file 2
...
2013-09-05 14:27:36.891 This is line 934594 in file 2
現在、これらのファイルを解析し、行をすばやく見つけようとするプログラムを作成しています。
たとえば、私が実行した場合
./my_program -start_time "2013-08-05 14:17:36" file_2.txt
このプログラムは、結果として 607083 を返すことができると期待しています。
また、-start_time は、「2013-08-05 14:17:35.899」や「2013-08-15」などの他の粒度に基づくこともできますが、最も近い結果を期待しています。
このファイルを 1 行ずつトラバースし、各行の先頭のタイムスタンプを比較できます (文字列比較を使用するだけです) が、O(N) 時間かかります。私はすでにそれを実装しており、スキップする行が最初に何百万行もあると本当に遅いことがわかりました。
これにバイナリ検索を使用できるかどうか疑問に思っています。最も近い結果を返す最良の方法であり、O(lgN) 時間しかかからないと思います