时间段交集计算
文章转发自:https://www.jianshu.com/p/b571bc0a4372
业务逻辑
逻辑很简单,就是一两个日期段取交集,可如果按正常思维去实现,其实日期交集的场景我们可以穷举出来,大概有4种情况
1、
1 |
|
2、
1 |
|
3、
1 |
|
4、
1 |
|
如果按这种逻辑实现我们的表达式可能至少要写4种情况,逻辑复杂,且可读性差
逆向思维
这是软件开发中非常重要的思维模式,在程序员数学中有重点介绍。
这里提到的程序员数学,是一套书,包括程序员基础数学,概率论和线性代数,同时也是进入机器学习的基础理论,有兴趣的朋友可以买回来读一读。
我们通过个例子,来实践一下逆向思维。
其实如果按取交集的逻辑来看,上面穷举出来有4 种情况。
但我们反过来想(逆向)
没有交集的情况只有两种可能
1、
1 |
|
2、
1 |
|
s1<e1 & s2<e2
1 |
|
e2<s1||e1<s2
1 |
|
!(e2<s1||e1<s2)
1 |
|
e2>=s1&&e1>=s2
这个就可以做为时间取交集的最终表达式,这里有一点非常重要,这个时间段我们有条件的
`s1<e1 & s2<e2`
这是表达式成立的充分条件
时间段交集计算
http://yoursite.com/2021/12/05/PHP/时间交集/