我正在编写一个日历应用程序,它需要检查重复条目之间的冲突。每个Entry 对象都有一个recurrences() 方法,该方法返回一个范围数组——每个范围包含每个未来事件的开始和结束时间。
我需要检查新条目和现有条目之间的冲突。我通过检查新条目的未来出现与现有条目的未来出现没有冲突来做到这一点:
def conflicts?(other)
conflicts = 0
recurrences.each do |my_rec|
other.recurrences.each do |other_rec|
start, finish = other_rec.first, other_rec.last
conflicts += 1 if my_rec.include?(start) || my_rec.include?(finish)
end
end
conflicts > 0
end
resumes() 默认返回开始时间和开始时间 + 1 年之间的所有事件
问题是这种方法效率不高。仅比较两个条目,每个条目在 1 年内每天重复一次,导致 365 * 365 次比较(在我的机器上需要 4 秒以上)。可能有任意数量的现有条目可以与新条目进行比较,因此我现在拥有的方法是无用的。
我没有计算机科学或数学背景,但我一直在阅读各种关于算法的教科书,但我一直无法找到优化方法的方法。还有其他人有什么想法吗?
谢谢
戴夫