我正在根目录中以以下格式存储一些输出例如
/from_2012_07_17_01_apple_to_2012_07_23_05_apple/
该目录中的详细信息是通过运行Java程序生成的
第一个字段是年,第二个字段是月,第三个字段是日,第四个字段是小时。这是我已经存储在根目录中的文件。其意图是将其用于以后的目的。
在后面的阶段,如果我有一个查询,要求以下
/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
如果有这两个。。我需要选择第一个文件,因为搜索空间较小,这是有效的。。。因此,我正在寻找这个解决方案
我不确定你是否有子文件夹,但解决这个问题的最好算法似乎是回溯。
好吧,只需按字母顺序对文件夹名称进行排序,然后将查询按排序插入其中,insertSort会给你一个i索引。之后,创建排序列表的一部分,其中包含从0到i-1的索引。从那时起,您只能处理名称的"to_*"部分。再次按字母顺序对子列表进行排序(仅使用to_*部分),并插入再次排序的查询字符串,这将为您提供一个j索引。在此列表中,从j+1到.length-1索引的每个文件夹都包含查询文件夹。在它之后,你必须找到最短的一个,有裂缝左右。我认为没有比这更有效的解决方案了。你可以阅读最抽象的回溯算法,它可能更快,但如果它能解决它的话,它非常复杂。
我在评论后开始删除它,但我认为应该留下它来帮助澄清问题。
你太努力了。后退一步。。。
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
}
首先,使用经过优化和安全的nio2java7工具
然后您可以split("_")
文件名,并比较字段[n]
和[n+m]