定期的なエントリ間の競合をチェックする必要があるカレンダー アプリケーションを作成しています。各 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
recurrences() のデフォルトでは、開始時刻から開始時刻 + 1 年までのすべての発生を返します
問題は、この方法があまり効率的でないことです。それぞれが 1 年以上毎日繰り返される 2 つのエントリだけを比較すると、365 * 365 の比較になります (私のマシンでは 4 秒以上かかります)。新しいエントリを比較する既存のエントリがいくつもある可能性があるため、現在の方法は役に立ちません。
私はコンピューター サイエンスや数学のバックグラウンドを持っていませんが、アルゴリズムに関するさまざまな教科書を読んでいますが、メソッドを最適化する方法を見つけることができませんでした。他に何かアイデアはありますか?
ありがとう
デイブ