Перебирання варіантів в програмуванні, Детальна інформація

Перебирання варіантів в програмуванні
Тип документу: Реферат
Сторінок: 10
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 26.4
Скачувань: 914
У загальному випадку метод розгалужень і меж не позбавляє перебирання. У цьому неважко переконатися, імітувавши наведений алгоритм на прикладі часів виконання завдань (12, 8, 7, 5, 4, 2).

Задача про розподіл завдань представляє чималу групу задач, які розв'язуються методом розгалужень і меж. Подивимося на цю задачу більш узагальнено. Розподіл (повний чи частковий) v(i)=<(1; k1), … , (i; ki)> подамо як послідовність , де aj позначає пару (j; kj). Очевидно, що v(i) одержується з v(i-1) додаванням компонента ai. Вартість розподілу при цьому не зменшується, тобто

C(v(i-1))\xF0A3 C(v(i)). (19.1)

Існує чимало задач, в яких розв'язок-послідовність будується шляхом "нарощування" часткових розв'язків новими компонентами ai. Умова (19.1) дозволяє відкидати ті часткові розв'язки та всіх їх нащадків, якщо їх вартість не може бути меншою вартості Cmin уже побудованого повного розв'язку. Таким чином, Cmin виступає верхньою межею для вартості розв'язків, які є сенс будувати. Але, як правило, обчислити вартість повного розв'язку можна лише після його побудови. Для запобігання побудови всіх повних розв'язків треба мати можливість оцінювати знизу їх вартість за вартістю побудованих часткових. Чим точнішою буде така оцінка, тим ефективнішим буде скорочення перебору.

Отже, алгоритм розв'язання багатьох задач за методом розгалужень і меж має таку загальну структуру:

Для кожного можливого a1 занести до черги частковий розв'язок

;

Обчислити нижню оцінку E вартості його нащадків, що є

повними розв'язками;

Cmin:=\xF0A5 ;

while (черга не порожня) and (її перший елемент має оцінку E
do

begin

Вилучити з черги її перший елемент Node;

if синами вузла Node є листки then

Обчислити вартість синів Node та за необхідності

запам'ятати нову поточну мінімальну вартість Cmin

else

Обчислити оцінку вартості синів вузла Node та

додати до черги лише тих із них, чия оцінка не більше Cmin

end.

4. Евристичні алгоритми

Повернемося до задачі про розподіл завдань по трьох процесорах і спробуємо розв'язати її у зовсім інший спосіб.

Нехай ми маємо неповний розподіл (S1, S2, S3) усіх завдань, крім останнього. У цьому випадку найкраще розподілити останнє завдання, додавши його час до найменшого з S1, S2, S3, тобто передати його до найменш завантаженого процесора.

Тепер правилом "передати чергове завдання до найменш завантаженого процесора" будемо керуватися при розподілі кожного з завдань. Застосування цього правила виражається алгоритмом, за яким завдання розподіляються без будь-якого перебирання варіантів:

розподілити перші три завдання по одному на процесор;

for i:=4 to n do

begin

обчислити k – номер найменшого з S[1], S[2], S[3];

додати T[i] до S[k]

The online video editor trusted by teams to make professional video in minutes