Зворотний перехід (англ. backjumping) — одна з технік, що дозволяє зменшити простір пошуку у алгоритмах пошуку з поверненням, завдяки чому підвищується ефективність роботи. Суть методу полягає в тому, щоб повертатись не на один крок назад, як у бектрекінгу, а відразу на декілька.
- Обхід дерева пошуку алгоритмом з поверненням
- Ілюстрація зворотного переходу: сірий вузол не відвідується
Визначення
Коли алгоритм пошуку з поверненням перебрав усі можливі значення змінної, він повертається до попередньої змінної і або надає їй наступного значення, або повертається ще вище. Інакше кажучи, якщо — поточна підстановка ( — змінна, — її значення) і алгоритм вже перебрав усі можливі значення для , то рішення, що починається з поточної підстановки, не існує. Після цього алгоритм переходить на рівень вище (де поточною підстановкою є ) і або змінює значення на наступне, або повертається ще на рівень вище.
Щоб довести, що при жодному значенні ми не досягнемо розв'язку, не обов'язково перебирати усі такі значення. Якщо алгоритм може довести, що існує індекс такий, що префікс ніяким чином не може бути доповнений до рішення, він може одразу перейти до зміни , не перебираючи піддерево поточної підстановки. Індекс , для якого алгоритм може довести вищезазначену властивість, називається «безпечним стрибком».
Для поточної підстановки були перевірені усі можливі значення , і всі вони виявились невдалими. Алгоритм з поверненням переходить до і намагається присвоїти їй нове значення. | Замість повернення на попередній крок алгоритм проводить додаткові обрахунки і встановлює, що підстановки , і не є частинами будь-якого розв'язку. | В результаті встановлюється, що поточна підстановка не є частиною розв'язку, тому алгоритм переходить безпосередньо до і намагається присвоїти їй нове значення. |
Ефективність алгоритму із зворотним переходом залежить від того, наскільки високо може перестрибнути алгоритм. Проте можливості алгоритму обмежені тим фактом, що в загальному випадку безпечність стрибка можна визначити лише виходячи з набору рішень. На практиці алгоритми зі зворотним переходом використовують найнижчий перехід, для якого безпечність може бути ефективно доведена.
Різні алгоритми визначають безпечність переходів по-різному, проте більш трудомісткі алгоритми визначення можуть окупатися за рахунок того, що більш високі переходи дозволяють економити час на переборі піддерев.
Зворотний перехід на листках дерева
Найпростішим випадком, в якому можливий зворотний перехід, є ситуація, коли усі можливі значення змінної є недопустимими. Наприклад, у задачі виконання обмежень поточна підстановка може задовольняти усім обмеженням, але може не існувати таких її розширень, що також задовольняють обмеженням. Така ситуація, коли усі значення змінної конфліктують із поточною підстановкою , а сама змінна є листком (тобто не має нащадків), називається «листовим глухим кутом».
Алгоритм із зворотним переходом за авторством Gaschnig робить перехід лише на листках. Інакше кажучи, він відрізняється від пошуку з поверненням лише тим, що може не перевіряти піддерева листків (тобто не перебирати усі можливі значення змінної ).
Безпечний перехід може бути знайдений визначенням для кожного значення найкоротшого префікса підстановки , що не сумісний з підстановкою . Інакше кажучи, якщо — допустиме значення змінної , то алгоритм має перевірити допустимість наступних підстановок:
… | ||||
… | ||||
… | ||||
Найменший індекс, для якого знайдена несумісність, є безпечним стрибком для випадку, коли є єдиним допустимим значенням для . Оскільки зазвичай змінні можуть мати декілька допустимих значень, алгоритм виконує вищенаведені обрахунки для усіх, після чого із знайдений безпечних переходів обирається максимальний максимальний.
На практиці алгоритм може перевіряти вищенаведені умови одночасно із перевіркою підстановки .
Зворотний перехід на внутрішніх вузлах
Попередній алгоритм здійснює зворотний перехід лише тоді, коли для усіх допустимих значень змінної може бути доведено, що не існує розв'язків із поточною підстановкою. Іншими словами, він дозволяє робити перехід лише на листках дерева пошуку.
Внутрішній вузол представляє таке присвоювання значення, що не порушує уже існуючої відповідності обмеженням. Якщо не існує розв'язку, що розширює цю підстановку, попередній алгоритм завжди здійснює повернення на попередній крок, а не стрибок.
Для внутрішніх вузлів стрибок не може здійснюватись так само, як і для листків. Дійсно, якщо якісь присвоювання значень змінній потребують продовження пошуку у піддереві, отже, вони відповідають обмеженням, і не має сенсу шукати префікс, котрий ці обмеження порушує.
В таких випадках безперспективність присвоювання для поточної підстановки доводить рекурсивний пошук. Алгоритм «знає», що для даної підстановки не існує розв'язку, тому що він повертається у цю точку замість того, щоб знайти розв'язок і зупинитись.
Ці повернення зумовлені «глухими кутами», точками, в яких алгоритм довів несумісність підстановки із обмеженнями. Для того, щоб зробити стрибок, алгоритм має «зрозуміти», що рішення не вдається знайти саме через «глухі кути». Безпечними переходами будуть індекси префіксів, котрі перетворюють ці глухі кути у часткові підстановки, що не відповідають умовам.
В цьому прикладі алгоритм повернувся до змінної після того, як перевірив усі можливі значення і виявив, що усі вони недопустимі. | Друга вершина залишається недопустимою навіть коли з її часткової підстановки видалити змінні та (зверніть увагу на те, що значення змінної зберігається у її нащадках) | Інші недопустимі підстановки залишаються такими навіть без , і | Алгоритм може здійснити стрибок до , так як це найменша змінна, що входить у всі недопустимі рішення. Для неї буде спробуване нове значення. |
Іншими словами, після перевірки усіх значень алгоритм може перейти до змінної за тієї умови, що поточна істинна підстановка несумісна із усіма істинними підстановками у листках візлів, що є нащадками .
Спрощення
Через потенційно велику кількість вузлів у піддереві змінної під час обробки цього піддерева збирається інфрмація, необхідна для безпечного стрибка із цієї змінної. Пошук безпечного стрибка може бути спрощений завдяки двом речам. Перше: хоча алгоритм і шукає безпечний стрибок, він не користується найвищим з можливих.
Друге можливе спрощення полягає у тому, що вузли піддерева змінної , що були пропущені стрибком, можуть бути проігноровані при пошуку стрибка для змінної . Точніше кажучи, вершини від до , що були пропущені стрибком, ніяк не пов'язані із піддеревом змінної і з іншими її піддеревами.
Дійсно, якщо алгоритм пішов від вершини до якимсь шляхом, але потім перестрибнув назад, він міг би просто перейти від до напряму. Таким чином, стрибок вказує на те, що вершини між та не мають відношення до піддерева вершини . Інакше кажучи, стрибок показує, що відвідування цієї частини дерева пошуку було помилкою. Завдяки цьому при пошуку стрибка із вершини або якогось з її предків ця частина дерева може бути проігнорована.
Цей факт може бути використаний наступним чином: у кожній вершині зберігатимемо перелік усіх змінних, яким вже присвоєні значення і котрих достатньо, щоб спростувати існування розв'язку у піддереві цієї вершини. Ці переліки складаються під час роботи алгоритму. При поверненні вище по дереву з переліку видаляється вершина, в якій він зберігався, після чого перелік переноситься у вершину, в яку виконується перехід. Переліки з вершин, котрі алгоритм перестрибує, автоматично ігноруються.
Зворотний перехід на графах
Суть зворотного переходу на графах полягає у тому, що безпечний стрибок може бути знайдений перевіркою того, які із змінних пов'язані із змінними , що представлені листовими вузлами. Кожна змінна (), що представлена листком і пов'язана із змінною , може бути використана для пошуку безпечних стрибків. Зокрема, коли всі значення змінної вже перебрані, ця множина містить індекси змінних, для яких не має змісту пробувати піддерево змінної . В результаті алгоритм може безпечно перестрибнути до найвищого індексу з цієї множини.
Той факт, що вершини, пропущені стрибком, можуть бути проігноровані, використовується наступним алгоритмом. Коли ми повертаємось із листового вузла, предку цього вузла (у випадку стрибка — вузлу, у який стрибаємо) відправляється множина змінних, що пов'язані із цим вузлом. Кожна внутрішня вершина підтримує таку саму множину. Кожного разу, коли вершина отримує множину від котрогось із своїх нащадків, отримана множина додається до вже існуючої у вузлі. Коли ми повертаємось чи стрибаємо із вузла, змінна вузла видаляється із множини, після чого множина відправляється у вершину, в котру здійснюється стрибок/перехід. Алгоритм працює завдяки тому, що у кожній вершині підтримується список змінних, котрого достатньо, щоб довести відсутність розв'язку у піддереві даного вузла. Так як множини відправляються лише коли ми покидаємо вузол, множини із вузлів, котрі ми перестрибуємо, просто ігноруються.
Зворотний перехід, що базується на конфліктах (або зворотний перехід, що управляється конфліктами)
conflict-based backjumping conflict-directed backjumping
Іще вишуканіший алгоритм, що у деяких випадках здатний досягти ще більших стрибків, заснований на перевірці не тільки присутності змінних у одній і тій самій умові, а й того, чи викликала ця умова несумісність. Зокрема, цей алгоритм зберігає одну з порушених умов у листових вузлах. У кожному вузлі найбільший індекс змінної, що бере участь в одній із умов, збережених у листках, є безпечним стрибком.
Хоча порушена умова у кожному листку не впливає на безпеку стрибка, вибір умови із найбільшим індексом підвищує «висоту» стрибка. Через це алгоритм із зворотним переходом, що управляється конфліктами, впорядковує умови таким чином, що обмеження для змінних із меншими індексами мають перевагу перед обмеженнями зі змінними із більшими індексами.
Формально кажучи, обмеження отримує перевагу перед обмеженням в тому випадку, коли найбільший індекс змінної у , але не в менший за найвищий індекс змінної у , але не в . Іншими словами, після виключення спільних змінних перевага надається обмеженню із найменшими індексами.
У листовому вузлі алгоритм надає перевагу індексу такому, що вступає у протиріччя із останньою змінною, що була обчислена у вузлі. Серед обмежень, що були порушені при цьому обчисленні, алгоритм обирає найвигіднішу (критерії див. вище), після чого вибирає усі індекси, що менші за . Таким чином, коли алгоритм приходить до змінної , найменший знайдений індекс є безпечним стрибком.
На практиці цей алгоритм спрощується завдяки збору усіх індексів у єдину множину замість створення множини для кожного значення . Зокрема алгоритм збирає у кожній вершині усі множини, що приходять від нащадків (як і раніше, лише від тих, що не були пропущені під час стрибку). При поверненні із вузла із множини видаляється змінна, що відповідає вузлу, після чого множина відправляється у точку стрибку/переходу.
Алгоритм із зворотним переходом, що управляється конфліктами, був запропонований для задачі виконання обмежень Патріком Просером у 1993-у році.
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до . |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zvorotnij perehid angl backjumping odna z tehnik sho dozvolyaye zmenshiti prostir poshuku u algoritmah poshuku z povernennyam zavdyaki chomu pidvishuyetsya efektivnist roboti Sut metodu polyagaye v tomu shob povertatis ne na odin krok nazad yak u bektrekingu a vidrazu na dekilka Obhid dereva poshuku algoritmom z povernennyam Ilyustraciya zvorotnogo perehodu sirij vuzol ne vidviduyetsyaViznachennyaKoli algoritm poshuku z povernennyam perebrav usi mozhlivi znachennya zminnoyi vin povertayetsya do poperednoyi zminnoyi i abo nadaye yij nastupnogo znachennya abo povertayetsya she vishe Inakshe kazhuchi yaksho x1 a1 xk ak displaystyle x 1 a 1 ldots x k a k potochna pidstanovka xi displaystyle x i zminna ai displaystyle a i yiyi znachennya i algoritm vzhe perebrav usi mozhlivi znachennya dlya xk 1 displaystyle x k 1 to rishennya sho pochinayetsya z potochnoyi pidstanovki ne isnuye Pislya cogo algoritm perehodit na riven vishe de potochnoyu pidstanovkoyu ye x1 a1 xk 1 ak 1 displaystyle x 1 a 1 ldots x k 1 a k 1 i abo zminyuye znachennya xk displaystyle x k na nastupne abo povertayetsya she na riven vishe Shob dovesti sho pri zhodnomu znachenni xk 1 displaystyle x k 1 mi ne dosyagnemo rozv yazku ne obov yazkovo perebirati usi taki znachennya Yaksho algoritm mozhe dovesti sho isnuye indeks j lt k displaystyle j lt k takij sho prefiks x1 xj a1 aj displaystyle x 1 ldots x j a 1 ldots a j niyakim chinom ne mozhe buti dopovnenij do rishennya vin mozhe odrazu perejti do zmini xj displaystyle x j ne perebirayuchi pidderevo potochnoyi pidstanovki Indeks j displaystyle j dlya yakogo algoritm mozhe dovesti vishezaznachenu vlastivist nazivayetsya bezpechnim stribkom Dlya potochnoyi pidstanovki x1x2x3x4 displaystyle x 1 x 2 x 3 x 4 buli perevireni usi mozhlivi znachennya x5 displaystyle x 5 i vsi voni viyavilis nevdalimi Algoritm z povernennyam perehodit do x4 displaystyle x 4 i namagayetsya prisvoyiti yij nove znachennya Zamist povernennya na poperednij krok algoritm provodit dodatkovi obrahunki i vstanovlyuye sho pidstanovki x1x2x5 211 displaystyle x 1 x 2 x 5 211 x1x5 22 displaystyle x 1 x 5 22 i x1x2x5 213 displaystyle x 1 x 2 x 5 213 ne ye chastinami bud yakogo rozv yazku V rezultati vstanovlyuyetsya sho potochna pidstanovka x1x2 displaystyle x 1 x 2 ne ye chastinoyu rozv yazku tomu algoritm perehodit bezposeredno do x2 displaystyle x 2 i namagayetsya prisvoyiti yij nove znachennya Efektivnist algoritmu iz zvorotnim perehodom zalezhit vid togo naskilki visoko mozhe perestribnuti algoritm Prote mozhlivosti algoritmu obmezheni tim faktom sho v zagalnomu vipadku bezpechnist stribka mozhna viznachiti lishe vihodyachi z naboru rishen Na praktici algoritmi zi zvorotnim perehodom vikoristovuyut najnizhchij perehid dlya yakogo bezpechnist mozhe buti efektivno dovedena Rizni algoritmi viznachayut bezpechnist perehodiv po riznomu prote bilsh trudomistki algoritmi viznachennya mozhut okupatisya za rahunok togo sho bilsh visoki perehodi dozvolyayut ekonomiti chas na perebori pidderev Zvorotnij perehid na listkah derevaNajprostishim vipadkom v yakomu mozhlivij zvorotnij perehid ye situaciya koli usi mozhlivi znachennya zminnoyi ye nedopustimimi Napriklad u zadachi vikonannya obmezhen potochna pidstanovka mozhe zadovolnyati usim obmezhennyam ale mozhe ne isnuvati takih yiyi rozshiren sho takozh zadovolnyayut obmezhennyam Taka situaciya koli usi znachennya zminnoyi xk 1 displaystyle x k 1 konfliktuyut iz potochnoyu pidstanovkoyu x1 xk a1 ak displaystyle x 1 ldots x k a 1 ldots a k a sama zminna xk 1 displaystyle x k 1 ye listkom tobto ne maye nashadkiv nazivayetsya listovim gluhim kutom Algoritm iz zvorotnim perehodom za avtorstvom Gaschnig robit perehid lishe na listkah Inakshe kazhuchi vin vidriznyayetsya vid poshuku z povernennyam lishe tim sho mozhe ne pereviryati piddereva listkiv tobto ne perebirati usi mozhlivi znachennya zminnoyi xk 1 displaystyle x k 1 Bezpechnij perehid mozhe buti znajdenij viznachennyam dlya kozhnogo znachennya ak 1 displaystyle a k 1 najkorotshogo prefiksa pidstanovki x1 xk a1 ak displaystyle x 1 ldots x k a 1 ldots a k sho ne sumisnij z pidstanovkoyu xk 1 ak 1 displaystyle x k 1 a k 1 Inakshe kazhuchi yaksho ak 1 displaystyle a k 1 dopustime znachennya zminnoyi xk 1 displaystyle x k 1 to algoritm maye pereviriti dopustimist nastupnih pidstanovok x1 a1 displaystyle x 1 a 1 xk 1 ak 1 displaystyle x k 1 a k 1 xk ak displaystyle x k a k xk 1 ak 1 displaystyle x k 1 a k 1 x1 a1 displaystyle x 1 a 1 xk 1 ak 1 displaystyle x k 1 a k 1 xk 1 ak 1 displaystyle x k 1 a k 1 x1 a1 displaystyle x 1 a 1 xk 1 ak 1 displaystyle x k 1 a k 1 Najmenshij indeks dlya yakogo znajdena nesumisnist ye bezpechnim stribkom dlya vipadku koli xk 1 ak 1 displaystyle x k 1 a k 1 ye yedinim dopustimim znachennyam dlya xk 1 displaystyle x k 1 Oskilki zazvichaj zminni mozhut mati dekilka dopustimih znachen algoritm vikonuye vishenavedeni obrahunki dlya usih pislya chogo iz znajdenij bezpechnih perehodiv obirayetsya maksimalnij maksimalnij Na praktici algoritm mozhe pereviryati vishenavedeni umovi odnochasno iz perevirkoyu pidstanovki xk 1 ak 1 displaystyle x k 1 a k 1 Zvorotnij perehid na vnutrishnih vuzlahPoperednij algoritm zdijsnyuye zvorotnij perehid lishe todi koli dlya usih dopustimih znachen zminnoyi mozhe buti dovedeno sho ne isnuye rozv yazkiv iz potochnoyu pidstanovkoyu Inshimi slovami vin dozvolyaye robiti perehid lishe na listkah dereva poshuku Vnutrishnij vuzol predstavlyaye take prisvoyuvannya znachennya sho ne porushuye uzhe isnuyuchoyi vidpovidnosti obmezhennyam Yaksho ne isnuye rozv yazku sho rozshiryuye cyu pidstanovku poperednij algoritm zavzhdi zdijsnyuye povernennya na poperednij krok a ne stribok Dlya vnutrishnih vuzliv stribok ne mozhe zdijsnyuvatis tak samo yak i dlya listkiv Dijsno yaksho yakis prisvoyuvannya znachen zminnij xk 1 displaystyle x k 1 potrebuyut prodovzhennya poshuku u pidderevi otzhe voni vidpovidayut obmezhennyam i ne maye sensu shukati prefiks kotrij ci obmezhennya porushuye V takih vipadkah bezperspektivnist prisvoyuvannya xk 1 ak 1 displaystyle x k 1 a k 1 dlya potochnoyi pidstanovki x1 xk displaystyle x 1 ldots x k dovodit rekursivnij poshuk Algoritm znaye sho dlya danoyi pidstanovki ne isnuye rozv yazku tomu sho vin povertayetsya u cyu tochku zamist togo shob znajti rozv yazok i zupinitis Ci povernennya zumovleni gluhimi kutami tochkami v yakih algoritm doviv nesumisnist pidstanovki iz obmezhennyami Dlya togo shob zrobiti stribok algoritm maye zrozumiti sho rishennya ne vdayetsya znajti same cherez gluhi kuti Bezpechnimi perehodami budut indeksi prefiksiv kotri peretvoryuyut ci gluhi kuti u chastkovi pidstanovki sho ne vidpovidayut umovam V comu prikladi algoritm povernuvsya do zminnoyi xk 1 displaystyle x k 1 pislya togo yak pereviriv usi mozhlivi znachennya i viyaviv sho usi voni nedopustimi Druga vershina zalishayetsya nedopustimoyu navit koli z yiyi chastkovoyi pidstanovki vidaliti zminni xk 1 displaystyle x k 1 ta xk displaystyle x k zvernit uvagu na te sho znachennya zminnoyi zberigayetsya u yiyi nashadkah Inshi nedopustimi pidstanovki zalishayutsya takimi navit bez xk 2 displaystyle x k 2 xk 1 displaystyle x k 1 i xk displaystyle x k Algoritm mozhe zdijsniti stribok do xk 2 displaystyle x k 2 tak yak ce najmensha zminna sho vhodit u vsi nedopustimi rishennya Dlya neyi bude sprobuvane nove znachennya Inshimi slovami pislya perevirki usih znachen xk 1 displaystyle x k 1 algoritm mozhe perejti do zminnoyi xi displaystyle x i za tiyeyi umovi sho potochna istinna pidstanovka x1 xi displaystyle x 1 ldots x i nesumisna iz usima istinnimi pidstanovkami xk 1 xk 2 displaystyle x k 1 x k 2 u listkah vizliv sho ye nashadkami xk 1 displaystyle x k 1 Sproshennya U procesi poshuku perehodu dlya zminnoyi xk 1 displaystyle x k 1 chi yiyi predkiv zminni u kolorovij oblasti mozhut buti proignorovani Cherez potencijno veliku kilkist vuzliv u pidderevi zminnoyi xk 1 displaystyle x k 1 pid chas obrobki cogo piddereva zbirayetsya infrmaciya neobhidna dlya bezpechnogo stribka iz ciyeyi zminnoyi Poshuk bezpechnogo stribka mozhe buti sproshenij zavdyaki dvom recham Pershe hocha algoritm i shukaye bezpechnij stribok vin ne koristuyetsya najvishim z mozhlivih Druge mozhlive sproshennya polyagaye u tomu sho vuzli piddereva zminnoyi xl displaystyle x l sho buli propusheni stribkom mozhut buti proignorovani pri poshuku stribka dlya zminnoyi xl displaystyle x l Tochnishe kazhuchi vershini vid xm displaystyle x m do xl displaystyle x l sho buli propusheni stribkom niyak ne pov yazani iz pidderevom zminnoyi xm displaystyle x m i z inshimi yiyi pidderevami Dijsno yaksho algoritm pishov vid vershini xl displaystyle x l do xm displaystyle x m yakims shlyahom ale potim perestribnuv nazad vin mig bi prosto perejti vid xl displaystyle x l do xm displaystyle x m napryamu Takim chinom stribok vkazuye na te sho vershini mizh xl displaystyle x l ta xm displaystyle x m ne mayut vidnoshennya do piddereva vershini xm displaystyle x m Inakshe kazhuchi stribok pokazuye sho vidviduvannya ciyeyi chastini dereva poshuku bulo pomilkoyu Zavdyaki comu pri poshuku stribka iz vershini xl displaystyle x l abo yakogos z yiyi predkiv cya chastina dereva mozhe buti proignorovana Zminni znachen yakih dostatno dlya dovedennya nesumisnosti u pidderevi vershini nakopichuyutsya u vershini i vidpravlyayutsya pislya vidalennya zminnoyi sho vidpovidaye vershini u vishe po derevu na zvorotnomu hodi Cej fakt mozhe buti vikoristanij nastupnim chinom u kozhnij vershini zberigatimemo perelik usih zminnih yakim vzhe prisvoyeni znachennya i kotrih dostatno shob sprostuvati isnuvannya rozv yazku u pidderevi ciyeyi vershini Ci pereliki skladayutsya pid chas roboti algoritmu Pri povernenni vishe po derevu z pereliku vidalyayetsya vershina v yakij vin zberigavsya pislya chogo perelik perenositsya u vershinu v yaku vikonuyetsya perehid Pereliki z vershin kotri algoritm perestribuye avtomatichno ignoruyutsya Zvorotnij perehid na grafah Sut zvorotnogo perehodu na grafah polyagaye u tomu sho bezpechnij stribok mozhe buti znajdenij perevirkoyu togo yaki iz zminnih x1 xk displaystyle x 1 ldots x k pov yazani iz zminnimi xk 1 xk 2 displaystyle x k 1 x k 2 sho predstavleni listovimi vuzlami Kozhna zminna xi displaystyle x i i gt k displaystyle i gt k sho predstavlena listkom i pov yazana iz zminnoyu xi displaystyle x i mozhe buti vikoristana dlya poshuku bezpechnih stribkiv Zokrema koli vsi znachennya zminnoyi xk 1 displaystyle x k 1 vzhe perebrani cya mnozhina mistit indeksi zminnih dlya yakih ne maye zmistu probuvati pidderevo zminnoyi xk 1 displaystyle x k 1 V rezultati algoritm mozhe bezpechno perestribnuti do najvishogo indeksu z ciyeyi mnozhini Toj fakt sho vershini propusheni stribkom mozhut buti proignorovani vikoristovuyetsya nastupnim algoritmom Koli mi povertayemos iz listovogo vuzla predku cogo vuzla u vipadku stribka vuzlu u yakij stribayemo vidpravlyayetsya mnozhina zminnih sho pov yazani iz cim vuzlom Kozhna vnutrishnya vershina pidtrimuye taku samu mnozhinu Kozhnogo razu koli vershina otrimuye mnozhinu vid kotrogos iz svoyih nashadkiv otrimana mnozhina dodayetsya do vzhe isnuyuchoyi u vuzli Koli mi povertayemos chi stribayemo iz vuzla zminna vuzla vidalyayetsya iz mnozhini pislya chogo mnozhina vidpravlyayetsya u vershinu v kotru zdijsnyuyetsya stribok perehid Algoritm pracyuye zavdyaki tomu sho u kozhnij vershini pidtrimuyetsya spisok zminnih kotrogo dostatno shob dovesti vidsutnist rozv yazku u pidderevi danogo vuzla Tak yak mnozhini vidpravlyayutsya lishe koli mi pokidayemo vuzol mnozhini iz vuzliv kotri mi perestribuyemo prosto ignoruyutsya Zvorotnij perehid sho bazuyetsya na konfliktah abo zvorotnij perehid sho upravlyayetsya konfliktami conflict based backjumping conflict directed backjumping Ishe vishukanishij algoritm sho u deyakih vipadkah zdatnij dosyagti she bilshih stribkiv zasnovanij na perevirci ne tilki prisutnosti zminnih u odnij i tij samij umovi a j togo chi viklikala cya umova nesumisnist Zokrema cej algoritm zberigaye odnu z porushenih umov u listovih vuzlah U kozhnomu vuzli najbilshij indeks zminnoyi sho bere uchast v odnij iz umov zberezhenih u listkah ye bezpechnim stribkom Hocha porushena umova u kozhnomu listku ne vplivaye na bezpeku stribka vibir umovi iz najbilshim indeksom pidvishuye visotu stribka Cherez ce algoritm iz zvorotnim perehodom sho upravlyayetsya konfliktami vporyadkovuye umovi takim chinom sho obmezhennya dlya zminnih iz menshimi indeksami mayut perevagu pered obmezhennyami zi zminnimi iz bilshimi indeksami Formalno kazhuchi obmezhennya C displaystyle C otrimuye perevagu pered obmezhennyam D displaystyle D v tomu vipadku koli najbilshij indeks zminnoyi u C displaystyle C ale ne v D displaystyle D menshij za najvishij indeks zminnoyi u D displaystyle D ale ne v C displaystyle C Inshimi slovami pislya viklyuchennya spilnih zminnih perevaga nadayetsya obmezhennyu iz najmenshimi indeksami U listovomu vuzli algoritm nadaye perevagu indeksu i displaystyle i takomu sho x1 xi displaystyle x 1 ldots x i vstupaye u protirichchya iz ostannoyu zminnoyu sho bula obchislena u vuzli Sered obmezhen sho buli porusheni pri comu obchislenni algoritm obiraye najvigidnishu kriteriyi div vishe pislya chogo vibiraye usi indeksi sho menshi za k 1 displaystyle k 1 Takim chinom koli algoritm prihodit do zminnoyi xk 1 displaystyle x k 1 najmenshij znajdenij indeks ye bezpechnim stribkom Na praktici cej algoritm sproshuyetsya zavdyaki zboru usih indeksiv u yedinu mnozhinu zamist stvorennya mnozhini dlya kozhnogo znachennya k displaystyle k Zokrema algoritm zbiraye u kozhnij vershini usi mnozhini sho prihodyat vid nashadkiv yak i ranishe lishe vid tih sho ne buli propusheni pid chas stribku Pri povernenni iz vuzla iz mnozhini vidalyayetsya zminna sho vidpovidaye vuzlu pislya chogo mnozhina vidpravlyayetsya u tochku stribku perehodu Algoritm iz zvorotnim perehodom sho upravlyayetsya konfliktami buv zaproponovanij dlya zadachi vikonannya obmezhen Patrikom Proserom u 1993 u roci Na cyu stattyu ne posilayutsya inshi statti Vikipediyi Bud laska rozstavte posilannya vidpovidno do prijnyatih rekomendacij