考虑到代理商的时间表,例如某一天上午9:00到下午5:30,下午1:00到下午1:30午休时间为30分钟,我需要安排不同长度的约会,约60分钟和大约90分钟.
如果出于某种原因,午休时间会在时间表上留下一些漏洞,我应该可以在午休时间30分钟/ –,而不是下午1点到下午1点30分,它可以在下午1点30分到下午2点之间移动或者下午12:30 – 下午1:00.
我开始创建午餐休息作为一种约会,它将提供移动starts_at和finishes_at属性的灵活性.约会是60分钟或90分钟,这是30分钟的倍数,午餐也是30分钟,我开始将代理商的时间表分成每个30分钟的时间段.
因此,对于特定日期的特定代理,查看他的日程安排我实例化了一系列时段,每个时段的持续时间为30分钟,starts_at和finishes_at属性类似于上午9:00 – 上午9:30,上午9:30 – 上午10:00,等等
我需要一些帮助来循环通过这个预约插槽阵列并拉出2个连续插槽或3个连续插槽,具体取决于60或90分钟的持续时间预约,请记住我应该能够移动午餐/ – 30分钟.
任何帮助深表感谢.
解决方法 看看你的问题:>约会时间为60或90分钟.
>午餐时间间隔为90分钟,时间间隔为12:30-2:00
我们希望尽量减少没有约会的分钟数.
现在,您有一个时间间隔填写,即上午9:00到下午5:30.假设约会在9:00-5:30之间,我们可以使用贪心算法根据最早的完成时间(source)和您的附加约束进行区间调度.
基本上算法如下(伪)
Let R be the set of all appointmentsLet R11 be the set of appointments from R before 12:30 that are compatible with 12:30-1:00 and R12 be the set of appointments from R after 1:00 that are compatible with 12:30-1:00Let R21 be the set of appointments from R before 1:00 that are compatible with 1:00-1:30 and R22 be the set of appointments from R after 1:30 that are compatible with 1:00-1:30Let R31 be the set of appointments from R before 1:30 that are compatible with 1:30-2:00 and R32 be the set of appointments from R after 2:00 that are compatible with 1:30-2:00Let R1Comb = findSet(R11) + 12:30-1:00 + findSet(R12)Let R2Comb = findSet(R21) + 1:00-1:30 + findSet(R22)Let R3Comb = findSet(R31) + 1:30-2:00 + findSet(R32)Function findSet(R) Let A be the time interval to fill While R is not empty Choose a request r in R that has the smallest finishes_at Add r to A Remove all appointments in R that are not compatible with r EnDWhile Return AEndFunctionReturn the R that has the smallest amount of holes in R1Comb,R2Comb,R3Comb
该算法使用了一些概念
>如果重叠,则约会r1与r2不兼容.
>由于#1,我们知道i = 1,2,3的Ri1 / Ri2不会相互冲突.因为如果Ri2中的约会与Ri1不兼容,那么它也与午餐期不兼容,这是一个矛盾,因为我们取出了所有不兼容的约会.
>一旦我们分开了约会集,那么就可以解决2个调度问题,这些问题可以贪婪地解决.
这个算法仍然是O(n log n),因为你正在做贪心算法6次(一个常数),每次贪婪迭代都是O(n log n),前几行和最后一行都是O( N).
人们在日程安排上写下论文,这不是一个简单的问题.我建议你看看http://www.asap.cs.nott.ac.uk/watt/resources/university.html以便更好地理解.
祝好运 :)
总结以上是内存溢出为你收集整理的ruby-on-rails – ruby / rails中的约会调度全部内容,希望文章能够帮你解决ruby-on-rails – ruby / rails中的约会调度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)