Algorithm 计算重叠日期范围的问题

Algorithm 计算重叠日期范围的问题,algorithm,language-agnostic,recursion,functional-programming,Algorithm,Language Agnostic,Recursion,Functional Programming,我在试图找出正确的算法来计算一组日期范围时遇到了一个问题 基本上,我有一个无序日期范围的列表(包含开始和结束时间数组的列表),我想合并这个列表,这样它就不会包含重叠的时间 基本上合并了两个日期范围: if start1 <= end2 and start2 <= end1 //Indicates overlap if start2 < start1 //put the smallest time in start1 start1 = start2 end

我在试图找出正确的算法来计算一组日期范围时遇到了一个问题

基本上,我有一个无序日期范围的列表(包含开始和结束时间数组的列表),我想合并这个列表,这样它就不会包含重叠的时间

基本上合并了两个日期范围:

if start1 <= end2 and start2 <= end1 //Indicates overlap
   if start2 < start1 //put the smallest time in start1
      start1 = start2
   endif
   if end2 > end1 //put the highest time in end1
      end1 = end2
   endif
endif

如果start1不查看间隔,只查看其末端

你有很多开始和结束的时刻。想象一下,开始时刻是红色的,结束时刻是蓝色的。或者想象一下,开始时刻是开始大括号,结束时刻是结束大括号

把它们放在一个列表中。从最早到最晚对列表进行排序,忽略颜色

现在带上一个设置为零的计数器,沿着列表走下去。当你看到红色的时刻,增加计数器。当你看到一个蓝色的时刻,减少计数器。当计数器值从0变为1时,输出“开始”和当前时间。当计数器值从1变为0时,输出“结束”和当前时间。如果计数器值降至0以下,则输出“Houston,我们有问题”。您应该以计数器为0和一系列良好的非重叠间隔结束

这是一个很好的老括号计数算法

插图

 A bunch of overlapping intervals:

 (-------------------) 
                       (----------------------)           
                                                          (---)
       (---------------------)                       
                                                     (-----------------)

 A bunch of interval ends:

 (-----(-------------)-(-----)----------------)      (----(---)--------)

n、 m.的答案是您所需要的,但如果您想使用您已经编写的代码,则只需按开始时间对范围进行排序,并遍历列表合并重叠。

包含一个解决方案,并对此进行了解释(好的,这取决于您优化的目的,您没有指定…)。应该很容易在FP中实现。您是否有机会告诉我您所参考的算法、数据结构或方法的正确方向?我认为这是贪婪算法部分的开始(尽管我不确定)。你必须首先对列表进行排序。你可以在这个链接中看到我的答案:这是一个很好的方法,而且实现起来非常简单。谢谢,我想我的方向不对!这个算法对于我在预订系统中计算资源分配的另一个问题非常有效。目标是从固定数量的某些资源开始,并确定如果其他人以前也这样做过,是否有人可以签出或保留总资源的一个子集。