所以这是一个棘手的问题,它有点简化,但是基于一个关于内存优化的真实世界问题(它不是作业)
假设您是两个日期之间的时期(例如2013-01-01至2013-01-31)。现在,您将获得一组日期条目,每个日期条目都包含日期和颜色。每个日期最多只有一个条目,但所有日期可能没有条目。
例如:
2013-01-01黄色
2013-01-02 Blue
2013-01-03 Red
2013-01-05黄色
等等
现在说我们有一个包含开始日期和结束日期的颜色。我们还有一个可选的星期几过滤器,如果声明,可以包含一周中的一天或几天。在那些情况下,跨度仅对那些日子“有效”。
例如,在下面的例子中我们可能有:
跨度#1:2013-01-01 - 2013-01-06蓝色
跨度#2:2013-01-13 - 2013-01-27 RED Mon
跨度#3:2013-01-08 - 2013-01-26 CYAN周三周六周日太阳
等等
问题是提出一个可行的算法(从性能,内存的角度来看,没有定量计算机:),它提供了最少量的跨度来描述给定的时间段(没有是保证最低金额,但即使这样会很好:)。跨度可能重叠。
暴力强迫看起来很讨厌,但应该有一个优雅的解决方案
答案 0 :(得分:0)
问题与使用circuit minimization的Karnaugh maps有一些相似之处。已知此问题是NP难的,因此像Quine–McCluskey algorithm这样的算法具有指数运行时。
因此我的意图告诉我,你的问题没有有效的算法。还有很多其他问题,例如vertex cover和set cover,它们也都是非常棘手的问题。我会尝试表明,套装可以减少你的问题,使你的问题也很难。