2 つの包含範囲 [x1:x2] と [y1:y2] (ただし、 および ) が与えられた場合、x1 ≤ x2
2y1 ≤ y2
つの範囲に重複があるかどうかをテストする最も効率的な方法は何ですか?
簡単な実装は次のとおりです。
bool testOverlap(int x1, int x2, int y1, int y2) {
return (x1 >= y1 && x1 <= y2) ||
(x2 >= y1 && x2 <= y2) ||
(y1 >= x1 && y1 <= x2) ||
(y2 >= x1 && y2 <= x2);
}
しかし、これを計算するより効率的な方法があると思います。
操作が最も少なくなるという点で最も効率的な方法は何でしょうか?
ベストアンサー1
範囲が重なるということはどういう意味でしょうか?それは、両方の範囲に含まれる数値Cが存在することを意味します。つまり、
x_start <= C <= x_end
そして
y_start <= C <= y_end
混乱を避けるために、範囲は次のようになります[x_start:x_end]
。[y_start:y_end]
さて、範囲が整形式であると仮定できる場合(つまり、x_start <= x_end
およびy_start <= y_end
)は、次のことをテストするだけで十分である。
x_start <= y_end && y_start <= x_end