Учитывая первую строку от a
до b
, где a < b
, и вторую строку от x
до y
, где x < y
, как вы рассчитаете длину пересечения этих двух?
Пример:
a =0, b=5, x=3, y=7
012345
|----|
|---|
34567
результатом будет 2
, поскольку они являются пересечением от 3
к 5
.
Есть ли выражение с этими 4 переменными для извлечения результата? Нет никакой гарантии, что есть перекресток, и не гарантируется, что x > a
Я просмотрел примеры пересечения промежутков времени, но все они содержат выражение if
, что невозможно в моей ситуации.
Логика довольно проста:
if (y<a) or (x>b):
return no intersection
intersection.left = max(a, x)
intersectioni.right = min(b, y)
Что вы имеете в виду под «линейным выражением»?
линейное уравнение с этими переменными, что-то вроде `is <= b`` is <= y` `ie> = a`` ie> = x` `i = ie - is`` maximize (i) `, поэтому я могу использовать это в формулировке ilp
Постановка задачи не предполагает максимизации и других видов оптимизации, она имеет единственное точное решение.
Но это не линейное выражение.