Задать вопрос
dawgcha
@dawgcha
Программист 1С

Какой алгоритм выбрать для отрисовывания органайзера?

Есть конечное число каких-то абстрактных задач (к примеру, это таски, назначенные на сегодня одному из специалистов в системе сервис-деск). Каждая задача имеет четко установленное время начала и время окончания. Это время задается с интервалом, скажем, 30 минут. Задачи пересекаются, то есть допускается ситуация, когда с 11:30 до 12:00 запланировано выполнение трех разных задач.

Необходимо нарисовать табличку, где строки - это время, а колонки - задачи. Иллюстрация ниже поможет понять принцип.

6003a7161ffa45ef8a92c0f1c7d19409.PNG

Интересный момент вот в чем: каждая задача стремится занять все доступные колонки.
Если задача не пересекается ни с одной другой задачей - она займет n = 6 колонок (задача A).
Если задача пересекается с еще одной задачей и только с ней - каждая займет n/2=3 колонки (задачи G и H).
При этом, если одна из задач уже занимает m=2 колонок, то другая должна занять n-m=4 колонки (задачи E и F).

Вопросы, которые необходимо решить:
1) заранее узнать общее количество колонок n
2) какую задачу в каких колонках размещать

Специально не буду описывать тот подход, который я уже опробовал, дабы не вводить никого в заблуждение :)
Он очень наивен и хорошо работает только на простейших примерах. Возможно, расскажу потом.

Подозреваю, что в целом задача сводится к максимально "плотному" размещению отрезков без пересечений на нескольких осях. Реализовав подобный алгоритм, я смогу решить сразу две подзадачи - узнать количество колонок n и принадлежность задач колонкам.

Есть идеи? Куда смотреть?
  • Вопрос задан
  • 2261 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Serhioromano
@Serhioromano
Web Developer
Здесь не все так просто. Иногда задачи нужно друг на друга ноложить. Что если в в какойто точке, задач в один момент времени больше 7ми а у вас 6 колонок. Или их 5, как будете делить?

Нужно произвести расчет всех временных отрезков на макете и у каждого события должно быть 2 свойства. 1 - сортровка. Это каким событие на отрезке является по счету если брать от 00 до 24. и второе это со сколькими событиями оно пересикается.

Исходя их этих 2 чисел надо делать маргин с лева. Думаю для этого подойдет количество пересечений / сортировка, а для ширины уже только количество пересечений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы