考虑您有几种日期模式 P1 - Pn。
其中一些很简单,例如 P1 - 所有星期一,P2 - 所有星期二;其他更复杂,如 P4 - 所有工作日等。
对于自定义日期数组(V1,V2),我必须创建最短的结果字符串,如图所示:
对于任何数组,我们必须创建表示数组中日期的字符串。最简单的方法是创建像 1.5.2013, 2.5.2013, 3.5.2013 ... 这样的字符串,但结果字符串会很长。
使用几个预定义的模式,我们可以创建更短的结果字符串。
对于结果字符串,我使用以下规则:
单个日期格式:DD.MM.YYYY (10 个字符)
枚举(日期和模式):逗号和空格(2 个字符)
日期间隔:DD.MM.YYYY-DD.MM.YYYY (21 个字符)
模式名称的间隔: Px-Py (5 个字符)
特殊词: except (6 个字符)
结果字符串示例:
V1 使用 P4 模式:
P4 除了 01.05.2013-03.05.2013、09.05.2013、10.05.2013、16.05.2013、17.05.2013 (80 个字符)
V1 使用 Pn 模式:
Pn 06.05.2013-08.05.2013、13.05.2013-15.05.2013、20.05.2013-24.05.2013、27.05.2013-31.05.2013 (94 个字符)
V1 使用最佳模式匹配:
P1-P3 01.05.2013-19.05.2013,P4 20.05.2013-31.05.2013 (54 个字符)
主要目标是创建最短的结果字符串。据我了解,我们可以通过找到最佳匹配模式/模式来实现这一点。
目前我正在尝试适应背包问题和最长公共子序列问题,但我不确定这是否是正确的方向。
我会很感激任何想法。
更新
感谢Jan Dvorak对我的问题的简短描述:
目标是使用预定义的字典(P1..Pn 以及所有间隔和单个日期)来描述 V,其中交集、并集和减法都允许,并且每个操作和原子都有预定义的成本(结果字符串中的字符数)。