1 / 1 / 0
Регистрация: 13.10.2020
Сообщений: 10
|
|
1 | |
Оптимальное распределение задач25.07.2021, 12:32. Показов 1722. Ответов 8
Задача звучит так: У вас есть 2-ядерный процессор и программа, состоящая из n независимых задач, которую нужно максимально быстро выполнить на этом процессоре, распределив задачи между 2 ядрами. Время выполнения задачи j это p_j. Задачи нельзя прерывать во время выполнения. Напишите псевдокод алгоритма, который распределяет задачи по 2 ядрам так, чтобы время завершения всей программы (то есть время завершения последней задачи) было минимально. Покажите, какую вычислительную сложность имеет ваш алгоритм и почему. Считайте, что размер массива p_j, не более 10^3, а его элементы - целые числа от 1 до 10^4
Я пробовал делать так, сортировать все числа за O(nlog n) и жадным алгоритмом распределять время выполнения этих задач за O(n). Например есть массив из 20 элементов: [13, 64, 61, 88, 1, 58, 47, 31, 97, 42, 92, 87, 99, 72, 26, 29, 73, 64, 57, 100]. Отсортировав, получаем [1, 13, 26, 29, 31, 42, 47, 57, 58, 61, 64, 64, 72, 73, 87, 88, 92, 97, 99, 100]. И теперь на каждое ядро поочередно берем максимальное время, то есть на 1 ядро: 100, 97, 88, 73, 64, 61, 57, 42, 29, 13 - общая сумма времени = 624 на 2 ядро: 99, 92, 87, 72, 64, 58, 47, 31, 26, 1 - общая сумма времени = 577 И теперь попытаться прировнять эти суммы. Будем брать последовательно минимальное число из ядра, у которого сумма времени больше. Проверяем 624 - 13 = 611 и 577 + 13 = 590 разница 21 624 - 29 = 595 и 577 + 29 = 606 разница 11 624 - 42 = 582 и 577 + 42 = 619 разница 37 И в конце смотри уже из 2 ядра, что можно переложить в первое (с учетом того, что мы закинули 11 в 2 ядро) 606 - 1 = 605 и 595 + 1 = 596 разница 9 Время выполнения O(n log n + n + n) = O(n log n). Скорее всего это решение неправильно, подскажите как можно решить такую задачу, какие алгоритмы использовать?
0
|
25.07.2021, 12:32 | |
Ответы с готовыми решениями:
8
Оптимальное распределение Оптимальное распределение по уровням дерево Оптимальное количество заданий и оптимальное количество игр при обучении с использованием ИИ Оптимальное распределение |
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
25.07.2021, 17:19 | 2 |
А если входной массив разделить на две части (два списка), подсчитать две суммы и затем жонглировать?
[13, 64, 61, 88, 1, 58, 47, 31, 97, 42, 92, 87, 99, 72, 26, 29, 73, 64, 57, 100] S[13, 64, 61, 88, 1, 58, 47, 31, 97, 42] = 502 S[92, 87, 99, 72, 26, 29, 73, 64, 57, 100] = 699 Задача сводится к тому, чтобы выбрать из первого/второго списка такие числа, которые отнимаются/прибавляются к 502, чтобы получить сумму S, такую что (S-600,5)=min. Или другая формулировка: выбрать из первого/второго списка такие числа, которые отнимаются/прибавляются, чтобы получить сумму S, такую что (S-98,5)=min. Алгоритм не предложен, только идея.
0
|
25.07.2021, 18:19 | 3 |
Нужно найти коэффициенты уравнения:
k1*p_j1 + k2*p_j2 + k3*p_j3 + ... kn*p_jn так, чтобы сумма была равна или как можно ближе к половине суммы p_j. (Kn = 0|1) А это перебор, число циклов равно в худшем случае 2^n
0
|
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
25.07.2021, 18:27 | 4 |
Задача разбиения множества чисел
https://ru.m.wikipedia.org/wik... 0%B5%D0%BB мы свели к Задача о сумме подмножеств https://ru.m.wikipedia.org/wik... 1%82%D0%B2
0
|
1 / 1 / 0
Регистрация: 13.10.2020
Сообщений: 10
|
|
25.07.2021, 18:30 [ТС] | 5 |
vantfiles, когда массив будет из 1000 элементов, довольно долго работать будет. На другом форуме предложили решать через динамическое программирование, со сложностью O(N^2 * W), где W - максимально возможное значение элементов массива
0
|
392 / 262 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
|
|
25.07.2021, 19:27 | 6 |
Сообщение было отмечено Smipe как решение
Решение
Лучше не получится. Например, в случае, когда можно разбить элементы по группам таким образом, чтобы суммы в группах были равны, даже на проверку этого условия нам придется написать задачу о рюкзаке. Сложность решения которой как раз N*T, где T - вместимость рюкзака. В вашем случае T = (максимальный элемент*N)/2, что и даёт
Берите решение с того форума.
0
|
431 / 302 / 89
Регистрация: 03.12.2015
Сообщений: 738
|
|||||||||||
31.07.2021, 18:29 | 7 | ||||||||||
Распределяем задачи по процессорам начиная с самых сложных (долгих). Отдаем задачу тому процессору, который на данный момент свободен (сумма всех его задач меньше суммы задача другого процессора).
Код
p1=[100, 92, 88, 73, 64, 61, 47, 42, 26, 13] sum(p1)=606 p2=[99, 97, 87, 72, 64, 58, 57, 31, 29, 1] sum(p2)=595
0
|
1 / 1 / 0
Регистрация: 13.10.2020
Сообщений: 10
|
||||||
31.07.2021, 22:43 [ТС] | 8 | |||||
vrm2, нет, Вы не совсем правильно поняли задачу. Нам нужно смотреть на максимум из двух сумм x1, x2 (пусть x1 >= x2), потому что последняя задача, которая закончит свое выполнение, будет лежать в этом максимальном числе x1.
Это разбиение будет давать суммы 600 и 601 То есть на втором ядре будут задачи с временем выполнения [1, 92, 87, 72, 26, 29, 73, 64, 57, 100]
0
|
215 / 40 / 0
Регистрация: 31.07.2021
Сообщений: 30
|
|
01.08.2021, 16:16 | 9 |
Наверное самим простим и очень эффективным решением, будет х - задач на ядро(х = сума сложности задач / количество ядер). Дальше просто загрузка на ядро, пока сума сложностей загруженных задач < х, и так по всем ядрам.
Если все-таки надо найти, максимально быстрого распределения задач на выполнения, то это будет комбинаторика(очень затратно). Добавлено через 43 минуты "загрузка на ядро" правильнее будет предложение, загрузка на очередь выполнение ядром. Кстати если задачи не будут меняться, то комбинаторика становиться оправданной, а так получается что поиск лучшей комбинации занимает больше времени, чем остаток длительности(эффективного решения от лучшей комбинации).
0
|
01.08.2021, 16:16 | |
01.08.2021, 16:16 | |
Помогаю со студенческими работами здесь
9
Оптимальное распределение Оптимальное распределение сумм Оптимальное распределение ресурсов Оптимальное распределение загрузки Оптимальное распределение ресурсов Определить оптимальное распределение сырья Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |