Я пишу приложение календаря, которое должно проверять наличие конфликтов
между повторяющимися записями. Каждый объект Entry имеет метод recurferences ()
который возвращает массив диапазонов - каждый диапазон содержит начало и конец
времена каждого будущего происшествия.
Мне нужно проверить наличие конфликтов между новыми и существующими записями. я
делая это, проверяя, что ни одно из будущих появлений нового
Столкновение записей с будущими вхождениями существующих записей:
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
recurferences () по умолчанию возвращает все вхождения между временем начала
и время начала + 1 год
проблема в том, что этот метод не очень эффективен. Сравнение только двух записей, каждая с ежедневным повторением в течение 1 года, приводит к 365 * 365 сравнениям (на моей машине это занимает более 4 секунд). Может быть любое количество существующих записей, чтобы сравнить новую запись с таким
метод, который у меня есть сейчас, бесполезен.
У меня нет компьютерных или математических знаний, но я был
читая различные учебники по алгоритмам, и я не смог найти
способ оптимизации метода. У кого-нибудь еще есть идеи?
спасибо
Dave