0

たとえば、ルートディレクトリに以下の形式でいくつかの出力を保存しています。

/from_2012_07_17_01_apple_to_2012_07_23_05_apple/

このディレクトリ内の詳細は、Java プログラムを実行することによって生成されます

最初のフィールドは年、2 番目は月、3 番目は日、4 番目は時です。これは、すでにルートに保存したファイルです。意図は、それを後の目的に使用することです。

後の段階で、以下を要求するクエリがある場合

/from_2012_07_19_01_apple_to_2012_07_20_05_apple/

これがすでにルート ディレクトリに 19>17 および 20<23 として表示されていることを知りたいです。これを特定し、同じプログラムを再利用して出力をユーザーに直接表示する代わりに、プログラムを再度実行しないようにしたいと思います。分割と比較の手動作業でこれを行うことができます。しかし、私はこれのための効率的なアルゴリズムを探しています。

EDITED 

ユーザー入力が (19-20 から) の場合。. 以下のファイルの存在を知る必要があります

2012_07_17_01_apple_to_2012_07_23_01_apple, 2012_07_14_01_apple_to_2012_07_25_01_apple

これら2つがある場合..検索スペースが少なく、効果的であるため、最初のファイルを選択する必要があります...したがって、このソリューションを探しています

4

3 に答える 3

1

サブフォルダーがあるかどうかはわかりませんが、この問題を解決する最良のアルゴリズムはバックトラッキングだと思われます。


フォルダー名をアルファベット順に並べ替え、並べ替えた状態でクエリを挿入すると、insertSort によって i インデックスが返されます。その後、ソートされたリストの一部を作成します。ウィッチには 0 から i-1 までのインデックスが含まれます。その時点から、名前の「to_*」部分のみを操作できます。サブリストをアルファベット順に並べ替え (to_* 部分のみを使用)、再度並べ替えたクエリ文字列を挿入すると、aj インデックスが得られます。このリストでは、j+1 から .length-1 までのインデックスが付けられたすべてのフォルダーにクエリ フォルダーが含まれています。その後、分割などで最短のものを見つける必要があります。これよりもはるかに効率的な解決策はないと思います。最も抽象的なバックトラッキングアルゴリズムについて読むことができます。それはより高速である可能性がありますが、それを解決できたとしても非常に複雑です。

于 2012-07-30T03:14:48.593 に答える
0

まず、最適化された安全なnio2 java7 ツールを使用します。

次にsplit("_")、ファイル名とフィールド[n]を比較して、[n+m]

于 2012-07-30T07:07:24.677 に答える
0

コメントの後にこれを削除し始めましたが、問題を明確にするために残すべきだと思います。


あなたは頑張りすぎています。あとずさりする...

String fname = createNameFromDates(... params ...); // returning "/from_2012_07_19_01_apple_to_2012_07_20_05_apple"
File target = new File(fname);
if (target.isDirectory()) {
   // directory exists...
} else {
   // create directory & data
}
于 2012-07-30T02:15:37.323 に答える