Эффективный способ вычислить эту область состоит в том, чтобы использовать алгоритм развертки. Давайте предположим, что мы развертываем вертикальную строку L (x) через объединение прямоугольников U:
Мы все еще должны решить 1D проблема. Вы хотите 1D структура, которая вычисляет динамично объединение (вертикальных) сегментов. Динамично, я подразумеваю, что Вы иногда добавляете новый сегмент, и иногда удаляете тот.
я уже детализировал в своем ответе на этот выходящий из строя вопрос о диапазонах , как сделать это статическим способом (который является на самом деле 1D развертка). Таким образом, если Вы хотите что-то простое, можно непосредственно применить это (путем перевычисления объединения для каждого события). Если Вы хотите что-то более эффективное, просто необходимо адаптировать его немного:
Это - Ваш динамический алгоритм. Предположение, что Вы будете использовать отсортированные наборы с разовыми журналом запросами местоположения для представления D1... D k, это - вероятно, самый эффективный неспециальный метод, который можно получить.
Оба ответа верны: встроенные наборы форм позволяют сделать это легко.
Имейте в виду, однако, что встроенные формы могут идти только в одном направлении: из модели, в которой есть внешний ключ. Без первичных ключей в обоих (плохо, поскольку тогда у вас может быть A -> B, а затем B -> A2), у вас не может быть встроенного набора форм в модели related_to.
Например, если у вас есть класс UserProfile, и хотите, чтобы они, когда они отображаются, отображали связанный объект User, как в строке,