![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
Создал тему в алгоритмах:
"Есть множество задач вида interface Тask{ execute(); } , связанных набором зависимостей: @Before(Task[]) -- задача должна быть гарантированно выполнена до выполениня всех задач из массива; @After(Task[]) -- задача может быть выполнена только после выполнения всех задач из массива; @If(contextParameter = <someValue>) -- задача может быть выполнена только если некая переменная (из доступного всех задачам контекста) равна <someValue>; @IfNot(contextParameter = <someValue>) -- задача может быть выполнена только если некая переменная (из доступного всех задачам контекста) не равна <someValue>; и т.д. и т.п. самые разные условия. Задачи выполняются последовательно, никакой многопоточности. Необходимо вычислить последовательность выполения задач, которая бы удовлетворяла все зависимостям между ними. Есть ли какой-то общий подход к решению таких проблем? готовые алгоритмы? возможно, построение графа или матрицы зависимостей? Вообщем нужен совет, как бы вы это делали? " Но писать буду на java, поэтому спрашиваю здесь тоже. Может быть есть готовые решения, которые можно реиспользовать (например в ant решается похожая задача)? Это сообщение отредактировал(а) Maksym - 3.7.2009, 12:05 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Начал бы с попытки написать самому логику сортировки одномерного массива задач в несколько проходов - сначала все Before в начало, потом все After в конец. И т.д. Неважно, что возможно существуют "готовые решения". Это сообщение отредактировал(а) COVD - 3.7.2009, 20:12 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Берём первую задачу в списке. eсли можем выполнить - Выполняем и помечаем как выполненную, иначе переносим в конец списка. Переходим к следующей задаче.
|
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
math64, COVD, спасибо за отклик.
Я вобщем-то навскидку написал Comparator<Worker>, загоняю все задачи (которые могут выполнится исходя из состояник контекста) в массив и сортирую Collections.sort(). Но мне этот подход не кажется оптимальным. При большом количестве задач... при том что задачи могут менять контекст -- приходится прогонять этот алгоритм после выполнения каждой задачи... В Алгоритмах кое-что еще присоветовали |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
"Неэстетично - зато дешево, надежно и практично" © "Бриллиантовая рука" |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |