我有一组事件数据(开始日期,结束日期,地点)。这些事件在国内发生,我需要弄清楚哪个事件应该在结束后去哪里。
例:
.. etc(数据集大约有100个条目,因此性能不是真正的问题)
在这个例子中,事件1可以移动并执行事件4,因为它在7月6日结束,事件4在17日开始。 (假设在同一天过境)
所有找不到合适匹配项的事件都会存储在报告中,供有人手动匹配。
此优化代码将在javascript中完成。
我的第一个想法是拥有2个阵列,具有相同的数据。第一个数组按开始日期排序,第二个数组按结束日期排序。然后浏览结束日期列表并尝试为其找到合适的开始日期,然后从数组中删除这些条目并继续这样,直到不再可能匹配为止。
有人对如何解决这个问题有更好的了解吗?如果您需要更多详细信息,请告诉我们!
答案 0 :(得分:1)
你的问题不是很清楚。如果我理解正确,您的目标是选择一个事件子集,以便您的选择最大化事件数量(并且没有重叠事件)。如果是这样,您的问题可以被视为Activity Selection Problem。有一个简单的贪婪算法来解决这个问题。
让
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 : (请注意 lse 是最后选定的事件)
S = {event[1]}
lse = 1
foreach event[i] do:
if start[i] > finish[lse]:
S = S + {event[i]}
lse = i
return S
基本上: