Javascript 将事件的结束日期与另一事件的开始日期匹配的优化

Javascript 将事件的结束日期与另一事件的开始日期匹配的优化,javascript,algorithm,date,optimization,data-structures,Javascript,Algorithm,Date,Optimization,Data Structures,我有一个事件开始日期、结束日期和地点的数据集。这些活动在国内进行,我需要弄清楚哪些活动结束后应该去哪里 例如: [1/7,6/7,多伦多]从7月1日开始,到7月6日结束 [2/7,4/7,蒙特利尔] [4/7、11/7,渥太华] [17/7、22/7,温哥华] …etc数据集大约有100个条目,因此性能不是真正的问题 在本例中,事件1可以移动并执行事件4,因为它在7月6日结束,而事件4在17日开始。假设当天过境 所有找不到合适匹配项的事件都将存储在报告中,以便有人手动匹配 此优化代码将在java

我有一个事件开始日期、结束日期和地点的数据集。这些活动在国内进行,我需要弄清楚哪些活动结束后应该去哪里

例如:

[1/7,6/7,多伦多]从7月1日开始,到7月6日结束 [2/7,4/7,蒙特利尔] [4/7、11/7,渥太华] [17/7、22/7,温哥华] …etc数据集大约有100个条目,因此性能不是真正的问题

在本例中,事件1可以移动并执行事件4,因为它在7月6日结束,而事件4在17日开始。假设当天过境

所有找不到合适匹配项的事件都将存储在报告中,以便有人手动匹配

此优化代码将在javascript中完成

我的第一个想法是有两个数组,具有相同的数据。第一个数组按开始日期排序,第二个数组按结束日期排序。然后检查结束日期列表,并尝试为其找到合适的开始日期,然后从数组中删除这些条目并继续这样操作,直到无法再进行匹配


有谁对如何解决这个问题有更好的想法吗?如果你需要更多的细节,让我知道

你的问题不是很清楚。如果我理解正确,您的目标是选择事件的子集,这样您的选择可以最大化事件的数量,并且不存在重叠事件。如果是这样的话,你的问题可以被看作是一个问题。有一个简单的贪婪算法来解决这个问题

并假设您已经在结束时间对事件进行了排序

以下贪婪算法将查找非重叠事件的最大子集: 请注意,lse是最后选择的事件

基本上:

您可以按结束时间对事件进行排序 您选择第一个事件 你在事件上循环,贪婪地选择第一个与你选择的最后一个不重叠的事件
听起来像是一个典型的间隔调度问题,而且似乎您已经在使用默认的贪婪算法方法,这可以被视为是最优的,除了您实际上不需要第一个排序的arrayWhaaa,很高兴我知道这种算法有一个名称!我在思考,如果事件重叠,会有什么影响。从我的示例中可以看到,事件2包含在事件1的时间框架中。我对这两个数组的想法是,在按开始日期排序的数组中,剩下的是能够确定哪些事件找不到另一个suiteableevent,而该suiteableevent将在剩余事件开始的地方结束。示例:事件1不能由列表中的任何其他事件启动,因为所有结束日期都大于事件1的开始日期。贪婪算法将找到您可以参加的最大事件集。如果不希望活动重叠,则无法参加所有未选择的活动。因此,如果算法选择了事件1,则事件2无法参与。如果允许事件重叠,则不需要任何算法:只需选择所有事件;
event[1..n] the n events
start[i] the start time of the event number i
finish[i] the finish time of the event number i
S = {event[1]}
lse = 1

foreach event[i] do:
     if start[i] > finish[lse]:
         S = S + {event[i]}
         lse = i

return S