找到与其他 table 相交最多的区间的起点和终点
Find a start and an ending of an interval which intersects with the table of others the most
这是一个任务:
夏花展的策展人正在为活动做准备。他们必须找到一个鲜花盛开的时间。他们有一个 table,其中包含 (0
ID、开花季节的开始和结束(StartMonth、StartDay、EndMonth、EndDay)
帮助策展人找到展览中鲜花最多的最早开放时间(间隔的开始和结束)。
注意:正确的时间不一定是已经存在的时间间隔
由于这是一项我想自己完成大部分的作业,因此我只想获得有关如何从理论上解决此问题的建议。
盛开季节的样本:
- 在“txt”文件中:
121 6 15 7 25
102 7 1 8 14
236 6 30 8 31
141 7 31 8 10
111 7 1 7 20
128 6 2 6 3
- 视觉表示(与“txt”中的数据不同)
首先我将介绍我的方法:
- 我做的第一件事是将间隔的月和日转换为一个数字格式(MM-DD 中的示例:08-15 我已更改为 30 + 31 + 15 = 76)
- 在那之后,我第一次检查了所有的间隔,并单独保存了一个有最多交叉点的间隔。
- 稍后我再次检查所有间隔,但这次我将它们专门与保存的间隔进行比较,如果它们不相交,它们就会被删除,这样我就减少了噪音。
- 此时我以为剩下要做的就是找到与保存的间隔相交的最小间隔。然而,我错了。我没有考虑到最小的间隔可能只有一个交点。
- 一段时间后,我意识到我需要找到一个区间,它在给定集合中具有最多的交点并且最小。但是我怎样才能找到两者呢?
- 毫无疑问,我的理论还有更多漏洞。我很确定即使我把它拉下来它仍然会有很多例外。
现在想想我脑子里冒出的一个想法是我可以试着做一个92天的结构
然后计算哪些日子包含最多的开花季节。这会很容易,但我对这个解决方案不满意,因为它效率太低。 (轻笑)与我当前一次又一次匹配间隔的代码相比呢?它仍然是低效的吗? :D
我也在网上搜索了答案,但只找到了一半。
总而言之,我很想听听其他意见。有哪些正确处理的方法?我的方法合理还是我应该寻找另一种方法?非常感谢您的帮助。同样,我不是在要求完整的解决方案,只是轻推答案。提前致谢。
按递增日期对所有间隔边界进行排序,将它们加权 +1 表示开始,-1 表示结束。
现在按时间顺序浏览列表,边走边添加点权重。每次,这都会给出不同盛开的花朵的数量。在你的例子中,012345456... 0.
同时,保持迄今为止给出最高计数的边界(如果出现平局,则保持最早的值)。最高区间的结束就是下一个界限。
如果多个区间同时开始或结束,则处理先结束的区间,以避免 zero-duration 解。 (为了实现这一点,设计一个比较函数就足够了,在平局的情况下,-1 具有优先权。)
这是一个任务:
夏花展的策展人正在为活动做准备。他们必须找到一个鲜花盛开的时间。他们有一个 table,其中包含 (0 ID、开花季节的开始和结束(StartMonth、StartDay、EndMonth、EndDay) 帮助策展人找到展览中鲜花最多的最早开放时间(间隔的开始和结束)。 注意:正确的时间不一定是已经存在的时间间隔 由于这是一项我想自己完成大部分的作业,因此我只想获得有关如何从理论上解决此问题的建议。 盛开季节的样本: 121 6 15 7 25 102 7 1 8 14 236 6 30 8 31 141 7 31 8 10 111 7 1 7 20 128 6 2 6 3 首先我将介绍我的方法: 现在想想我脑子里冒出的一个想法是我可以试着做一个92天的结构
然后计算哪些日子包含最多的开花季节。这会很容易,但我对这个解决方案不满意,因为它效率太低。 (轻笑)与我当前一次又一次匹配间隔的代码相比呢?它仍然是低效的吗? :D 我也在网上搜索了答案,但只找到了一半。 总而言之,我很想听听其他意见。有哪些正确处理的方法?我的方法合理还是我应该寻找另一种方法?非常感谢您的帮助。同样,我不是在要求完整的解决方案,只是轻推答案。提前致谢。
按递增日期对所有间隔边界进行排序,将它们加权 +1 表示开始,-1 表示结束。
现在按时间顺序浏览列表,边走边添加点权重。每次,这都会给出不同盛开的花朵的数量。在你的例子中,012345456... 0.
同时,保持迄今为止给出最高计数的边界(如果出现平局,则保持最早的值)。最高区间的结束就是下一个界限。
如果多个区间同时开始或结束,则处理先结束的区间,以避免 zero-duration 解。 (为了实现这一点,设计一个比较函数就足够了,在平局的情况下,-1 具有优先权。)