日期插入算法

时间:2009-01-07 18:04:06

标签: algorithm list date

我有一个List,它有Foo对象,每个Foo都有一个开始日期和一个结束日期。 我想插入一个新的Foo对象,它有自己的开始和结束日期。

我希望列表中的元素相应地更新它们的开始和结束日期,插入新的Foo对象,以及新的Foo对象在List中找到正确的位置。我等一下,看看这是否足以让某人了解我的问题,看看我是否需要进一步解释。

2 个答案:

答案 0 :(得分:2)

要查找插入点,您可以使用interpolation search(例如,将每个日期视为msecs中的整数),当插入项目时,它可以触发更新其邻居的方法,然后更新其邻居收到更新请求后,就行了。

我可能会过度简化您的问题,但根据我对您的帖子的理解,这应该比O(n)时间平均多一点。

答案 1 :(得分:1)

您的新Foo对象需要遍历列表并找到需要插入的位置。但要小心,因为有一堆边缘情况可能会搞砸你的清单。您的逻辑应该在以下情况下起作用:

   1) The new interval fits into an existing interval -- do nothing
   2) The new interval begins and ends before the first interval -- 
           insert it at the front of the list
   3) The new interval stretches the existing start, end, 
      or both without cutting across adjacent intervals --
          replace the start or end date on existing Foo.
   4) The new interval begins after the end of the previous interval, but 
      ends after the beginning of the next interval --
           walk the list with a sentinel until you find a Foo that begins before
           the end of your new Foo. Delete the Foos that fall in 
           between the current Foo and the sentinel, adjusting the 
           end time if necessary.
   5) The new interval begins after the end of the last interval --
           insert it at the end of the list.

我可能错过了一个边缘案例,但这是我在解决一个非常类似问题时使用的模型。