開始/終了日時の値のリストを考えると、次の3つのことを検証する必要があります。
- 各間隔で、開始時刻は終了時刻より前です
- リスト要素間に重複は存在しません。各開始/終了スパンは、リスト全体の離散間隔を表す必要があります
- シリーズにギャップはあり得ません。最初から最後まで、継続的にカバーする必要があります。
だから、与えられた:
( (1970-01-01, 1970-12-31), (1971-01-01, 1971-12-31), (1972-01-01, 1972-12-31), (1973-01-01, 1973-12-31) )
成功の結果が示されます。
与えられた
( (1970-12-31, 1970-01-01), (1970-10-01, 1971-12-31), (1972-01-01, 1972-12-31), (1973-01-01, 1973-12-31) )
開始日が最初の要素の終了日より後に来ることを示すメッセージが提供されます。
与えられた
( (1970-01-01, 1970-12-31), (1970-10-01, 1971-12-31), (1972-01-01, 1972-12-31), (1973-01-01, 1973-12-31) )
最初の要素と2番目の要素の間に重複が存在することを示すメッセージが提供されます。
与えられた
( (1970-01-01, 1970-12-31), (1971-10-01, 1971-12-31), (1973-01-01, 1973-12-31), (1974-01-01, 1974-12-31) )
2番目と3番目の要素の間にギャップが存在することを示すメッセージが提供されます。
最初の要件は単純なものです。問題は、より広範な検証にどのように組み込むのが最適かということです。
2番目の要件は、以下の記事である程度満たされていますが、1組の間隔でしか機能しないため、各要素を他のすべての要素と比較する必要があるため、O(n ^ 2)を実現します。2つの日付範囲が重複しているかどうかを判断する
この記事-間隔のリストで間隔の重複を検索しますか?-2番目の要件により適切に対処しているようで、最初の要件は区間木の母集団に組み込むことができます。
したがって、3番目の要件が残ります。区間木を使用して、区間全体のギャップを決定することは可能ですか?
これはJavascript、node.jsにあることをお伝えします。ただし、これをHaskellまたは別の関数型言語で解決するのは興味深いでしょう...
ありがとう!
r/スティーブ