Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анализ зависимостей, последовательность выполнения, java решения 
:(
    Опции темы
Maksym
Дата 3.7.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL   Вверх
COVD
Дата 3.7.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

как бы вы это делали?

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

Это сообщение отредактировал(а) COVD - 3.7.2009, 20:12
PM MAIL   Вверх
math64
Дата 3.7.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Берём первую задачу в списке. eсли можем выполнить - Выполняем и помечаем как выполненную, иначе переносим в конец списка. Переходим к следующей задаче.
PM   Вверх
Maksym
Дата 6.7.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



math64, COVD, спасибо за отклик.
Я вобщем-то навскидку написал Comparator<Worker>, загоняю все задачи (которые могут выполнится исходя из состояник контекста) в массив и сортирую Collections.sort().
Но мне этот подход не кажется оптимальным. При большом количестве задач... при том что задачи могут менять контекст -- приходится прогонять этот алгоритм после выполнения каждой задачи...
В Алгоритмах кое-что еще присоветовали smile 

PM MAIL   Вверх
COVD
Дата 7.7.2009, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Но мне этот подход не кажется оптимальным

"Неэстетично - зато дешево, надежно и практично" © "Бриллиантовая рука"  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.