c# - 两组数据的交集

标签 c# algorithm datetime intersection

在过去的一个半星期里,我一直在为这个算法绞尽脑汁,但我无法让它发挥作用。

基本上我有一个时间表(我知道“边界”的时间值) 我有红色部分(人员进出工作场所的事件)。我想知道人们在他们的日程安排内在工作场所度过的时间,我不在乎他们是在工作之前还是之后,或者在午休时间。

你有什么建议吗?关于我可以在这里应用的数学理论或规则?或您看到的类似问题可以指出我吗?我一直很难找到解决方案。任何帮助将不胜感激。

Picture

例如:

时间表:
上午 7:30(开始)中午 12:00(午休)
下午 1:30(午餐休息结束)下午 5:00(工作日结束)

全天人员流动:
进场:早上 6 点 50 分,出场:早上 6 点 55 分
进场:上午 7:00,出场:上午 11:45
进场:下午 1 点 45 分,出场:下午 5 点 05 分

因此,我的预期输出时间跨度为:7:30(它忽略了工作时间表之外的工作时间)

最佳答案

我会将其视为状态机问题。有四种状态:S+W+、S-W+、S+W-、S-W-。 预定时间对应于 S+ 状态, worker 在场对应于 W+ 状态。目标是将 S+W+ 中的时间添加到交点时间。

有效的转换是:

S+W+ End of schedule -> S-W+
S+W+ Worker leaves -> S+W-
S-W+ Start of schedule -> S+W+
S-W+ Worker leaves -> S-W-
S+W- End of schedule -> S-W-
S+W- Worker arrives -> S+W+
S-W- Start of schedule -> S+W-
S-W+ Worker arrives -> S-W+

按时间顺序处理事件,从状态 S-W- 开始。如果两个事件同时发生,则按任一顺序处理。

在过渡到 S+W+ 时,注意时间。在从 S+W+ 转换出来时,从转换时间减去最后记录的时间,并将结果添加到交叉点时间。

关于c# - 两组数据的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910198/

相关文章:

c# - 构造一个 linq 查询

c# - Background Intelligent Transfer Service(BITS) 下载速度真的很慢?

java - 为什么 Java 使用 (hash & 0x7FFFFFFF) % tab.length 来决定键的索引?

algorithm - gimp 色阶算法

python - sqlalchemy 通过比较 datetime.now() 和列默认日期进行过滤

c# - 如何在Windows中制作Apple风格的程序

c# - async/await 关键字在 .net 4.0 中不可用

algorithm - 根据矩阵行和列索引调用唯一函数

php - 在 SQL 查询中使用日期时间边距

python - datetime.replace 从根本上被破坏了吗?