1 | |
В правильном ли направлении я иду? (Разработать программу для составления списка заданий для параллельных процессоров)23.07.2013, 21:53. Показов 2895. Ответов 25
Метки нет (Все метки)
Есть задачка:
1) Полный перебор перестановок, и вывод только тех последовательностей, время выполнения которых минимально, но допустим при 14 задачах мы имеем 87 178 291 200 вариантов последовательностей и они будут очень долго перебираться. 2) Я вручную просмотрел и пришел к тому, что можно просто отсортировать массив по невозрастанию и по порядку добавлять задачи в первый освобождающийся процессор, но тут мы получим только одну последовательность, а все остальные получатся, если выполнить все перестановки с задачами, время выполнения которых одинаково. Вопрос в том, правилен ли второй способ(или я что-то упустил)? И будет ли это считаться решением задачи(ведь вроде не говорится, что требуется найти все последовательности)?
0
|
23.07.2013, 21:53 | |
Ответы с готовыми решениями:
25
Разработать программу для составления списка неуспевающих студентов Разработать программу для составления итоговой ведомости, в которой итоговая оценка по предмету равна средне-арифмитической по трем циклам Разработать приложение для автоматизации составления тестов Разработать программу для сохранения списка покупателей бытовой техники в виде файла |
23.07.2013, 22:18 | 2 |
Хм... Вот если такая ситуация (я не совсем понял про перестановки, поэтому если что, то пиши): 2 процессор занят, освободится через 10 единиц времени (ЕВ). Третий процессор освободится через 2 ЕВ, а первый - только что освободился. Запускаем на первом процесс, длинной 100500 ЕВ (это последний процесс, который надо запустить), но на 3 процессоре он бы выполнился за 100 ЕВ, что значит, что лучше было бы подождать до освобождения третьего, и загрузить его.
1
|
23.07.2013, 22:27 [ТС] | 3 |
процессоры одинаковые, следовательно, очередная задача выполняется одинаковое время на любом из них
Перестановки. Допустим изначальная последовательность загрузки задач следующая: {1, 2, 3, 4, 5} вот варианты перестановок(всего их будет 5! = 120) : {1, 2, 3, 5, 4} {1, 2, 5, 3, 4} {1, 2, 5, 4, 3} и т.д.
0
|
23.07.2013, 22:50 [ТС] | 7 |
ограничений нет, в том то и дело, заданий может быть 100, именно поэтому я и в растерянности, первый находит все варианты, но очень долго для 100 он несколько лет наверно будет подбирать последовательности.
а по моему варианту если будет (N - порядок задач, а T время их выполнения) N = {3, 4, 1, 2} T = {8, 8, 4, 3} то тут уже получается 2 решения 1 - {3, 4, 1, 2} 2 - {4, 3, 1, 2} вот как эти все варианты перебрать из полученной последовательности N я не знаю, а если узнаю не факт, что это будет быстро, хотя и быстрее, чем порождать все перестановки
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
24.07.2013, 07:03 | 8 |
все не читал, но вроде как второй вариант более правильный. у меня такая идея (вроде как ваша):
сортируем массив заданий по времени выполнения в порядке убывания. идем по этому массиву и очередное задание кидаем в тот процессор у которого общее время выполнения всех его заданий наименьшее. пример: 4 7 2 5 7 9 2 1 5 6 8 3 2 7 8 9 8 8 7 7 7 6 5 5 4 3 2 2 2 1 первый процессор получил: 9 7 4 3 2 второй процессор получил: 8 7 6 2 третий процессор получил: 8 7 5 2 1 вроде не ошибся. тут скорее всего это не оптимально будет с точки зрения распределения (типа можно сбалансировать чуть чуть лучше)
1
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
24.07.2013, 07:08 | 9 |
ваша задача максимизировать количество таких моментов ti, что все процессоры включены в работу. проще говоря, нужно так составить процессы, чтобы максимально долгое время процессоры работали одновременно.
для этого достаточно разбить процессы на три группы таким образом, чтобы суммарное время их выполнения в каждой группе было как можно более "одинаковым". понятно, почему так: при таком варианте расписания процессоры и будут задействованы одновременно наибольшее количество времени. то есть ваша задача: посчитать, можно ли набор t[] разбить на три группы с максимально похожими суммами. это требует O(N2), решается динамикой. N - количество процессов.
1
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
24.07.2013, 07:16 | 10 |
1
|
24.07.2013, 07:56 | 11 |
Сообщение было отмечено как решение
Решение
ваша задача это в точности известная задача о разбиении (о куче камней), в которой известно количество камней и их веса. Требуется распределить камни по n кучам так, чтобы вес самой тяжелой кучи был минимальным.
Посмотрите книгу Романовский И.В. Алгоритмы решения экстремальных задач. (страница 247) эта задача из темы экстремальных задач на графах.
4
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
24.07.2013, 13:08 | 12 |
я дал грубую оценку. сейчас попробую точнее определить сложность решения, которое я подразумевал.
другого, более быстрого, решения этой задачи лично я не вижу. не могу отрицать, что оно существует. но вариант "отсортировать и попорядку..." точно не полностью корректный. Добавлено через 16 минут я быстро закрыл эту книгу... скажите, пожалуйста, какая оценка у решения из книги?
1
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
24.07.2013, 13:29 | 14 |
в общем получается что-то вроде O(N * SumT), где N - количество процессов, SumT - суммарное время их выполнения. в масштабах этой задачи время маленькое.
1
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
24.07.2013, 13:37 | 15 |
а что тут делает SumT?
а можно алгоритм увидеть? Добавлено через 52 секунды странно просто, если время задач измеряется в секундах то ок, если то же самое только в годах, то что-то не очень
1
|
24.07.2013, 15:03 | 16 |
пусть имеется n камней (потоков) и m кучек (процессоров). сложность алгоритма Эта оценка приведена у Стивена Скиена.
просто автор так главу назвал. В книге Стивен Скиена. Алгоритмы. эта задача в главе "Динамическое программирование" NP-сложные задачи несколько иные.
1
|
24.07.2013, 16:20 [ТС] | 18 | |||||
Спасибо, сейчас почитаю книги, может еще посоветуете какие-нибудь книги, чтобы полностью разобраться с темой таких задач? (про np-полные задачи, прочел на вики, но понял мало)
Сортировка по убыванию и правда не подходит, дали вот такой контрпример, который этот способ не проходит {10 10 10 10 7 6 6} Нашел алгоритм, который выполняется ~2 секунды(на моей машине) при 25 задачах, но я не понимаю, как этот алгоритм получен функция получения следующей последовательности seq - последовательность задающая порядок задач
0
|
24.07.2013, 19:43 | 19 |
Не по теме: ну, да, в 2010 году чуть сенсацией не стала работа индийского математика (выкладываю ссылку, так как сам автор выложил в сеть свою статью)
1
|
25.07.2013, 20:15 [ТС] | 20 |
Up
может еще посоветуете какие-нибудь книги, чтобы полностью разобраться с темой таких задач?
0
|
25.07.2013, 20:15 | |
25.07.2013, 20:15 | |
Помогаю со студенческими работами здесь
20
Разработать иерархию не менее 2 классов, и программу Разработать программу для реализации игры пятнашки. Разработать 2-3 Разработать приложение для генерации (проверки) заданий типа А13 Направьте, пожалуйста, в правильном направлении Волшебный пинок в правильном направлении Олимпиадные задачки. Натолкните в правильном направлении Написать программу для составления судоку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |