Skip to content
This repository has been archived by the owner on Oct 3, 2024. It is now read-only.

Алгоритмы #46

Open
alex-ac opened this issue Apr 10, 2012 · 1 comment
Open

Алгоритмы #46

alex-ac opened this issue Apr 10, 2012 · 1 comment

Comments

@alex-ac
Copy link
Contributor

alex-ac commented Apr 10, 2012

Написать алгоритмы, для следующих задач:

  • Установка времени события так, чтобы оно не конфликтовало с другими событиями людей, участвующих в нем.
  • Отбор людей для регулярно повторяющегося события.

Вводятся дополнительные сущности в алгоритмах:

traits - ограничения событий по времени.

traits ::= traits_list "\" traits_list
traits_list ::= {trait}
trait ::= "("datetime"|"datetime")"
datetime ::= year"-"month"-"day" "hour":"min":"sec

до "" - интервалы времени, в которые событие может проходить, после - интервалы, в которых событие проходить не может.

В итоге событие располагается на множестве:

U ⋂ ( A_1 ∪ A_2 ∪ ... ∪ A_i) \ D_1 \ D_2 \ ... \ D_j

A_1 ... A_i - интервалы до "", D_1 ... D_j - интервалы после "".

В lua представляется таблицей

traits = {
 ["allow"] = {
  {["from"] = timestamp, ["to"] = timestamp},
  {["from"] = timestamp, ["to"] = timestamp}
 },
 ["deny"] = {
  {["from"] = timestamp, ["to"] = timestamp},
  {["from"] = timestamp, ["to"] = timestamp}
 }
}

Функции:

algorithms.parse_traits(traits) -- перевести из строки в таблицу
algorithms.make_traits(traits) -- обратное преобразование
algorithms.optimize_traits(traits) -- оптимизовать интервалы
         -- (убрать пересечения, по возможности избавиться от deny ограничений)
@ghost ghost assigned alex-ac Apr 10, 2012
@alex-ac
Copy link
Contributor Author

alex-ac commented May 22, 2012

lua модуль task_system реализует универсальный алгоритм по теории расписаний. Для работы необходимо создать задачи, ресурсы и процессоры (процессор - ресурс необходимый для выполнения любой задачи, но притом только один), а также порядок назначения событий (тут вся соль).

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

Поясню:
К примеру помещения можно считать процессорами (для проведения лекции нужна аудитория, притом только одна), ресурсами - лектора и студентов (они должны быть на событии, но их много).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant