我需要一个算法来找到最早的日期使用数字0-9只有一次的格式DD/MM HH:MM:SS。实际答案是: 26/03 17:48:59
发布于 2012-05-09 03:20:52
最简单的方法-生成0...9的所有排列,并检查它们是否为有效日期。
10 =3 628 800
如果你想提高效率,回溯会有所帮助。在这种情况下,这只是一个简单的约束满足问题,有效日期的数量远远少于排列的数量。此外,您可以按最低月份、最低日期等顺序考虑它们。
例如
01不起作用,因为时间的第一个数字(10s小时)需要是0或1。02不起作用,因为现在时间的第一个数字必须是1,而日期在二月只能是0,1,2。
诸若此类。
FWIW -只有769个有效日期
import datetime
import itertools
count = 1
for perm in itertools.permutations( range(10) ):
i = 0;
day = perm[i]+perm[i+1]*10
i+=2
month = perm[i]+perm[i+1]*10
i+=2
hour = perm[i]+perm[i+1]*10
i+=2
minute = perm[i]+perm[i+1]*10
i+=2
second = perm[i]+perm[i+1]*10
try:
print datetime.datetime( 2012, month, day, hour, minute, second)
count+=1
except:
pass
print count
发布于 2012-05-09 21:33:33
这是一个constraint satisfaction problem。您可能希望先使用日期格式MM/DD HH:MM:SS,然后再转换您的答案。在这种格式中,字典顺序上最小的有效日期字符串将是您要查找的答案,因此,如果您系统地搜索,那么您找到的第一个有效日期将是解决方案。
基本上,您的搜索空间具有12x31x24x60x60的大部分有效日期。因此,您的约束包括:
month < 13
day < 32
hour < 24
minutes < 60
seconds < 60
occurrence(date, i) == 1 for each i = 0 to 9
然后,您可以使用backtracking search algorithm系统地遍历搜索空间。
https://stackoverflow.com/questions/10504932
复制相似问题