0

これを確認する最も効率的な方法は何ですか:

A is scheduled for 4 - 7;
B is scheduled for 5 - 8;

上記の日程が重なっています。次の例で、A と B が重複しているかどうかを Java で確認するにはどうすればよいですか。

のために

int start = 4;
int end = 7;

Bの場合

int start = 5;
int end = 8;

オーバーラップしているかどうかを確認する最も効率的な方法を教えてください。ありがとうございました

4

3 に答える 3

2

最も効率的な方法は、インターバル ツリーを使用することです。

于 2013-08-31T17:29:20.207 に答える
1

以下のロジックは、オーバーラップをテストするために機能するはずです。これは、終了日からさかのぼって行われる個別のネガティブ チェックです。チェックする他の方法は、 data.getTime() のような参照開始時刻を取ることです

private boolean testOverlap(Date sched1Start, Date sched1End, Date sched2Start, Date sched2End) {

    //Validate ranges to check if End dates are after start dates

    //Overlaps if both schedules end at same time
    if(sched1End.equals(sched2End)) return true;

    //Get which one ends last
    if(sched1End.before(sched2End)) {

        //Working backwards sched2 starts after sched1 Ends so they dont overlap
        if(sched2Start.after(sched1End) || sched2Start.equals(sched1End)) {
            //Doesnt overlap
            return false;
        }

    } else {
        //Sched1 ends last
        if(sched1Start.after(sched2End) || sched1Start.equals(sched2End)) {
            //Doesnt overlap
            return false;
        }
    }
    return true;
}
于 2013-08-31T18:56:47.753 に答える
0

少数のデータだけを処理する場合は、開始と終了を比較するだけでも十分に高速です。ただし、大きなデータを扱っている場合は、ここで拡張ツリーなどの他のデータ構造を使用して、効率を高めることができます。

于 2013-08-31T17:27:52.437 に答える