当前位置:编程学习 > C#/ASP.NET >>

求时间的集合天数快速算法

在项目中查询一段时间是否被占用,如没有占用返回时间段
 比喻说查询开始时间 2010-01-02 到 2010-01-30没有被占用的时间区间
 已知被占用的时间段 A集合 2010-01-03 到 2010-01-05
 预占用的时间段 B集合 2010-01-07 到2010-01-08
求出C集合出来
也就是 2010-01-02 到2010-01-03
      2010-01-05 到 2010-01-07 
      2010-01-08 到 2010-01-30
如何快速实现
  --------------------编程问答-------------------- 先求AB并集,再求补集
循环AB并集求补集
--------------------编程问答-------------------- 请问补集如何实现 --------------------编程问答--------------------
引用 2 楼 20011521 的回复:
请问补集如何实现

循环AB并集求补集
上一个被占用的时间区间的结束为未占用时间区间开始
下一个被占用的时间区间的开始为未占用时间区间结束
首尾用你的查询区间 --------------------编程问答-------------------- 如果确定,A和B没有交集,可能这么做:
1.从原集合中去掉A集合占用的区间:
 a.如果A的开始时间晚于原集合开始时间:添加区间原集合开始时间-A集合开始时间到集合C
 b.如果A的结束时间早于原集合结束时间:添加区间A集合结束时间-原集合结束时间到集合C
2.从C集合去掉B集合占用的区间:
 a.判断B集合是否属于C集合的某个子区间,属于则从该子区间中去掉B集合占用的区间,方法同1(可递归实现). --------------------编程问答-------------------- 留个脚印 --------------------编程问答-------------------- 没看明白,帮顶 --------------------编程问答-------------------- 没啥通用性的问题。你自己对排除的时间排序,依次的做判断不就可以了。关键是你返回的也是几个时间的间隔点,最终判断还是要总结的写个方法。 --------------------编程问答-------------------- 先建一个总的集合,然后把已经占用的删除就可以了。
这问题不负责,关键是看具体环境。 --------------------编程问答-------------------- 时间排序
自定义实体类,通过 LINQ的Intersect(交集),Except(差集)计算
--------------------编程问答--------------------
引用楼主 20011521 的回复:
在项目中查询一段时间是否被占用,如没有占用返回时间段
 比喻说查询开始时间 2010-01-02 到 2010-01-30没有被占用的时间区间
 已知被占用的时间段 A集合 2010-01-03 到 2010-01-05
 预占用的时间段 B集合 2010-01-07 到2010-01-08
求出C集合出来
也就是 2010-01-02 到2010-01-03
      2010-0……


开始和结束时间为
StartDay和EndDay
已经占用的时间段是hasUsedStartDay和hasUsedEndDay
预留的时间段是ReserveStartDay和ReserveEndDay

你要的结果就是:
1、先排除占用时间段,剩下的实际时间就是:StartDay-hasUsedStartDay:EndDay-hasUsedEndDay
2、再去掉预留的时间段,剩下的就是你要的结果:
if(ReserveStartDay>hasUsedStartDay && hasUsedStartDay<hasUsedEndDay)
   StartDay-hasUsedStartDay:EndDay-ReserveStartDay
else
   StartDay-ReserveStartDay:EndDay-hasUsedEndDay
else
   tartDay-hasUsedStartDay:EndDay-ReserveStartDay

没有其他的判断方法,只能去计算!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,