Жа́дібний алгори́тм (англ. Greedy algorithm) — простий і прямолінійний евристичний алгоритм, який приймає найкраще рішення, виходячи з наявних на кожному етапі даних, не зважаючи на можливі наслідки, сподіваючись урешті-решт отримати оптимальний розв'язок. Легкий в реалізації і часто дуже ефективний за часом виконання. Багато задач не можуть бути розв'язані за його допомогою.
Наприклад, використання жадібної стратегії для задачі комівояжера породжує такий алгоритм: «На кожному етапі вибирати найближче з невідвіданих міст».
Специфіка
Зазвичай, жадібний алгоритм базується на п'яти принципах:
- Набір можливих варіантів, з яких робиться вибір;
- Функція вибору, за допомогою якої знаходиться найкращий варіант, який буде додано до розв'язку;
- Функція придатності, яка визначає придатність отриманого набору;
- Функція цілі, передає значення розв'язку або частковому розв'язку;
- Функція розв'язку, яка вказує на те, що кінцевий розв'язок знайдено.
Визначання придатності
Придатний набір варіантів — такий, що обіцяє не просто отримання розв'язку, а отримання оптимального розв'язку задачі.
На відміну від динамічного програмування, за якого задача розв'язується знизу догори, за жадібної стратегії це робиться згори донизу, шляхом здійснення одного жадібного вибору за іншим, зведенням великої задачі до малої.
Критерії застосування
Жадібний алгоритм добре розв'язує деякі задачі, а інші — ні. Більшість задач, для яких він спрацьовує добре, мають дві властивості: по-перше, до них можливо застосувати принцип жадібного вибору, по-друге, вони мають властивість оптимальної підструктури.
Принцип жадібного вибору
До оптимізаційної задачі можна застосувати принцип жадібного вибору, якщо послідовність локально оптимальних виборів дає глобально оптимальний розв'язок. В типовому випадку доведення оптимальності здійснюється за такою схемою: спочатку доводиться, що жадібний вибір на першому етапі не унеможливлює шляху до оптимального розв'язку: для будь-якого розв'язку є інший, узгоджений із жадібним і не гірший від першого. Далі доводиться, що підзадача, яка виникла після жадібного вибору на першому етапі, аналогічна початковій, і міркування закінчується за індукцією. Інакше кажучи, за жадібного алгоритму ніколи не переглядаються попередні вибори для здійснення наступного, на відміну від динамічного програмування.
Властивість оптимальної підструктури
«Задача має оптимальну підструктуру, якщо оптимальний розв'язок задачі містить оптимальний розв'язок для підзадач». Інакше кажучи, задача має оптимальну підструктуру, якщо кожен наступний крок веде до оптимального розв'язку. Прикладом «неоптимальної підструктури» може бути ситуація в шахах, коли взяття ферзя (хороший наступний крок) веде до програшу партії в цілому.
Коли алгоритми жадібного типу зазнають невдачі
Жадібні алгоритми можна охарактеризувати як «короткозорі» і «невідновлювані». Вони ідеальні лише для задач з «оптимальною підструктурою». Попри це, жадібні алгоритми найкраще підходять для простих задач. Для багатьох інших задач жадібні алгоритми зазнають невдачі у продукуванні оптимального розв'язку, і можуть навіть видати найгірший з можливих розв'язків. Один з прикладів — алгоритм найближчого сусіднього міста, згаданий вище.
Приклади
Розмін монет
Задача. Монетна система деякої держави складається з монет вартістю . Вимагається видати суму S найменшою можливою кількістю монет.
Жадібний алгоритм розв'язання цієї задачі такий. Беремо найбільшу можливу кількість монет вартості : . Так само знаходимо скільки потрібно монет меншого номіналу і т. д.
Для цієї задачі жадібний алгоритм не завжди дає правильний розв'язок. Наприклад, суму 10 копійок монетами вартістю 1, 5 і 6 коп. жадібний алгоритм розміняє так: 6 коп. — 1 шт., 1 коп. — 4 шт., в той час як правильний розв'язок — 2 монети по 5 копійок. Проте, на всіх реальних монетних системах жадібний алгоритм видає правильну відповідь.
Вибір заявок
Задача. На конференції, щоб відвести більше часу на неформальне спілкування, різні секції рознесли по різних аудиторіях. Вчений із надзвичайно широкими інтересами бажає відвідати декілька доповідей у різних секціях. Відомі початок і кінець кожної доповіді. Визначити, яку найбільшу кількість доповідей можна відвідати.
Наведемо жадібний алгоритм, який розв'язує цю задачу. При цьому вважатимемо, що заявки впорядковано за зростанням часу закінчення. Якщо це не так, то можна відсортувати їх за час ; заявки з однаковим часом закінчення розташовуємо в довільному порядку.
Activity-Selector(s,f)
-
length[s]
for
to n
do if
then
∪ {i}
return A
На вхід алгоритму подаються масиви початків і закінчень доповідей. Множина А складається з номерів вибраних заявок, а j — номер наступної заявки. Жадібний алгоритм шукає заявку, що починається не раніше від закінчення j-ї, потім знайдену заявку включає в А, а j присвоює її номер.
Алгоритм працює за , тобто за складністю сортування, оскільки вибірка має меншу складність . На кожному кроці вибирається найкращий розв'язок. Покажемо, що результатом буде оптимальний розв'язок.
Доведення. Зауважимо, що всі заявки відсортовано за неспаданням часу завершення. Заявка номер 1 однозначно входить до оптимального розв'язку, (якщо ні, замінимо найпершу заявку в оптимумі нею, гірше від цього не стане). Відкинувши всі заявки, що суперечать першій, отримаємо початкову задачу з меншою кількістю заявок. Розмірковуючи індуктивно, приходимо до оптимального розв'язку.
Примітки
- Black, Paul E. (2 лютого 2005). . Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology (NIST). Архів оригіналу за 23 березня 2019. Процитовано 17 серпня 2012.
- Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. 16. Жадібні алгоритми. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Gutin, Gregory; Yeo, Anders; Zverovich, Alexey (2002). Traveling salesman should not be greedy: Domination analysis of greedy-type heuristics for the TSP. Discrete Applied Mathematics. 117 (1–3): 81—86. doi:10.1016/S0166-218X(01)00195-0.
Див. також
Джерела
- Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. 16. Жадібні алгоритми. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Greedy algorithm visualization [ 30 серпня 2009 у Wayback Machine.] Візуалізація задачі N ферзів (розташувати на дошці N*N, так щоб жоден з них не атакував іншого).
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zha dibnij algori tm angl Greedy algorithm prostij i pryamolinijnij evristichnij algoritm yakij prijmaye najkrashe rishennya vihodyachi z nayavnih na kozhnomu etapi danih ne zvazhayuchi na mozhlivi naslidki spodivayuchis ureshti resht otrimati optimalnij rozv yazok Legkij v realizaciyi i chasto duzhe efektivnij za chasom vikonannya Bagato zadach ne mozhut buti rozv yazani za jogo dopomogoyu Napriklad vikoristannya zhadibnoyi strategiyi dlya zadachi komivoyazhera porodzhuye takij algoritm Na kozhnomu etapi vibirati najblizhche z nevidvidanih mist SpecifikaZazvichaj zhadibnij algoritm bazuyetsya na p yati principah Nabir mozhlivih variantiv z yakih robitsya vibir Funkciya viboru za dopomogoyu yakoyi znahoditsya najkrashij variant yakij bude dodano do rozv yazku Funkciya pridatnosti yaka viznachaye pridatnist otrimanogo naboru Funkciya cili peredaye znachennya rozv yazku abo chastkovomu rozv yazku Funkciya rozv yazku yaka vkazuye na te sho kincevij rozv yazok znajdeno Viznachannya pridatnosti Pridatnij nabir variantiv takij sho obicyaye ne prosto otrimannya rozv yazku a otrimannya optimalnogo rozv yazku zadachi Na vidminu vid dinamichnogo programuvannya za yakogo zadacha rozv yazuyetsya znizu dogori za zhadibnoyi strategiyi ce robitsya zgori donizu shlyahom zdijsnennya odnogo zhadibnogo viboru za inshim zvedennyam velikoyi zadachi do maloyi Kriteriyi zastosuvannyaZhadibnij algoritm dobre rozv yazuye deyaki zadachi a inshi ni Bilshist zadach dlya yakih vin spracovuye dobre mayut dvi vlastivosti po pershe do nih mozhlivo zastosuvati princip zhadibnogo viboru po druge voni mayut vlastivist optimalnoyi pidstrukturi Princip zhadibnogo viboru Do optimizacijnoyi zadachi mozhna zastosuvati princip zhadibnogo viboru yaksho poslidovnist lokalno optimalnih viboriv daye globalno optimalnij rozv yazok V tipovomu vipadku dovedennya optimalnosti zdijsnyuyetsya za takoyu shemoyu spochatku dovoditsya sho zhadibnij vibir na pershomu etapi ne unemozhlivlyuye shlyahu do optimalnogo rozv yazku dlya bud yakogo rozv yazku ye inshij uzgodzhenij iz zhadibnim i ne girshij vid pershogo Dali dovoditsya sho pidzadacha yaka vinikla pislya zhadibnogo viboru na pershomu etapi analogichna pochatkovij i mirkuvannya zakinchuyetsya za indukciyeyu Inakshe kazhuchi za zhadibnogo algoritmu nikoli ne pereglyadayutsya poperedni vibori dlya zdijsnennya nastupnogo na vidminu vid dinamichnogo programuvannya Vlastivist optimalnoyi pidstrukturi Zadacha maye optimalnu pidstrukturu yaksho optimalnij rozv yazok zadachi mistit optimalnij rozv yazok dlya pidzadach Inakshe kazhuchi zadacha maye optimalnu pidstrukturu yaksho kozhen nastupnij krok vede do optimalnogo rozv yazku Prikladom neoptimalnoyi pidstrukturi mozhe buti situaciya v shahah koli vzyattya ferzya horoshij nastupnij krok vede do prograshu partiyi v cilomu Koli algoritmi zhadibnogo tipu zaznayut nevdachiZhadibni algoritmi mozhna oharakterizuvati yak korotkozori i nevidnovlyuvani Voni idealni lishe dlya zadach z optimalnoyu pidstrukturoyu Popri ce zhadibni algoritmi najkrashe pidhodyat dlya prostih zadach Dlya bagatoh inshih zadach zhadibni algoritmi zaznayut nevdachi u produkuvanni optimalnogo rozv yazku i mozhut navit vidati najgirshij z mozhlivih rozv yazkiv Odin z prikladiv algoritm najblizhchogo susidnogo mista zgadanij vishe PrikladiRozmin monet Zadacha Monetna sistema deyakoyi derzhavi skladayetsya z monet vartistyu a 1 1 lt a 2 lt lt a n displaystyle a 1 1 lt a 2 lt lt a n Vimagayetsya vidati sumu S najmenshoyu mozhlivoyu kilkistyu monet Zhadibnij algoritm rozv yazannya ciyeyi zadachi takij Beremo najbilshu mozhlivu kilkist monet vartosti a n displaystyle a n x n S a n displaystyle x n lfloor S a n rfloor Tak samo znahodimo skilki potribno monet menshogo nominalu i t d Dlya ciyeyi zadachi zhadibnij algoritm ne zavzhdi daye pravilnij rozv yazok Napriklad sumu 10 kopijok monetami vartistyu 1 5 i 6 kop zhadibnij algoritm rozminyaye tak 6 kop 1 sht 1 kop 4 sht v toj chas yak pravilnij rozv yazok 2 moneti po 5 kopijok Prote na vsih realnih monetnih sistemah zhadibnij algoritm vidaye pravilnu vidpovid Vibir zayavok Zadacha Na konferenciyi shob vidvesti bilshe chasu na neformalne spilkuvannya rizni sekciyi roznesli po riznih auditoriyah Vchenij iz nadzvichajno shirokimi interesami bazhaye vidvidati dekilka dopovidej u riznih sekciyah Vidomi pochatok s i displaystyle s i i kinec f i displaystyle f i kozhnoyi dopovidi Viznachiti yaku najbilshu kilkist dopovidej mozhna vidvidati Navedemo zhadibnij algoritm yakij rozv yazuye cyu zadachu Pri comu vvazhatimemo sho zayavki vporyadkovano za zrostannyam chasu zakinchennya Yaksho ce ne tak to mozhna vidsortuvati yih za chas O n log n displaystyle O n log n zayavki z odnakovim chasom zakinchennya roztashovuyemo v dovilnomu poryadku Activity Selector s f n displaystyle n leftarrow length s A 1 displaystyle A leftarrow left 1 right j 1 displaystyle j leftarrow 1 for i 2 displaystyle i leftarrow 2 to n do if s i f j displaystyle s i geq f j then A A displaystyle A leftarrow A i j i displaystyle j leftarrow i return A Na vhid algoritmu podayutsya masivi pochatkiv i zakinchen dopovidej Mnozhina A skladayetsya z nomeriv vibranih zayavok a j nomer nastupnoyi zayavki Zhadibnij algoritm shukaye zayavku sho pochinayetsya ne ranishe vid zakinchennya j yi potim znajdenu zayavku vklyuchaye v A a j prisvoyuye yiyi nomer Algoritm pracyuye za O n log n displaystyle O n log n tobto za skladnistyu sortuvannya oskilki vibirka maye menshu skladnist O n displaystyle O n Na kozhnomu kroci vibirayetsya najkrashij rozv yazok Pokazhemo sho rezultatom bude optimalnij rozv yazok Dovedennya Zauvazhimo sho vsi zayavki vidsortovano za nespadannyam chasu zavershennya Zayavka nomer 1 odnoznachno vhodit do optimalnogo rozv yazku yaksho ni zaminimo najpershu zayavku v optimumi neyu girshe vid cogo ne stane Vidkinuvshi vsi zayavki sho superechat pershij otrimayemo pochatkovu zadachu z menshoyu kilkistyu zayavok Rozmirkovuyuchi induktivno prihodimo do optimalnogo rozv yazku PrimitkiBlack Paul E 2 lyutogo 2005 Dictionary of Algorithms and Data Structures U S National Institute of Standards and Technology NIST Arhiv originalu za 23 bereznya 2019 Procitovano 17 serpnya 2012 Tomas Kormen Charlz Lejzerson Ronald Rivest Kliford Stajn 2009 1990 16 Zhadibni algoritmi Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Gutin Gregory Yeo Anders Zverovich Alexey 2002 Traveling salesman should not be greedy Domination analysis of greedy type heuristics for the TSP Discrete Applied Mathematics 117 1 3 81 86 doi 10 1016 S0166 218X 01 00195 0 Div takozhPortal Matematika Evristichnij algoritm Zhadibnij algoritm Rado Edmondsa Dzherela Tomas Kormen Charlz Lejzerson Ronald Rivest Kliford Stajn 2009 1990 16 Zhadibni algoritmi Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Greedy algorithm visualization 30 serpnya 2009 u Wayback Machine Vizualizaciya zadachi N ferziv roztashuvati na doshci N N tak shob zhoden z nih ne atakuvav inshogo