Алгори́тм по́шуку в глибину́ (англ. Depth-first search, DFS) — алгоритм для обходу дерева, структури подібної до дерева, або графу. Робота алгоритму починається з кореня дерева (або іншої обраної вершини в графі) і здійснюється обхід в максимально можливу глибину до переходу на наступну вершину.
Порядок обходу вершин. | |
Клас | Алгоритм пошуку |
---|---|
Структура даних | Граф |
Найгірша швидкодія | |
Просторова складність у найгіршому випадку |
Опис
Нехай G=(V, E) — простий зв'язний граф, усі вершини якого позначено попарно різними символами. У процесі пошуку вглиб вершинами графу G надають номери (DFS-номери) та певним способом даних для збереження множин, яку називають стеком. Зі стеку можна вилучити тільки той елемент, котрий було додано до нього останнім: стек працює за принципом «останній прийшов — перший вийшов» (LIFO). Інакше кажучи, додавання й вилучення елементів у стеку відбувається з одного кінця, який називається верхівкою стеку. DFS-номери вершини х позначають DFS(х).
Алгоритм
Цей розділ не містить . (грудень 2021) |
Наведемо кроки алгоритму
- Почати з довільної вершини v. Виконати DFS(v):=1. Включити цю вершину в стек.
- Розглянути вершину у верхівці стеку: нехай це вершина х. Якщо всі ребра, інцидентні вершині х, позначено, то перейти до кроку 4, інакше — до кроку 3.
- Нехай {x, y} — непозначене ребро. Якщо DFS(у) уже визначено, то позначити ребро {x, y} штриховою лінією та перейти до кроку 2. Якщо DFS(у) не визначено, то позначити ребро {x, y} потовщеною суцільною лінією, визначити DFS(у) як черговий DFS-номер, включити цю вершину в стек і перейти до кроку 2.
- Виключити вершину х зі стеку. Якщо стек порожній, то зупинитись, інакше — перейти до кроку 2.
Обчислювальна складність алгоритму
Обчислювальною складністю алгоритму (або просто складністю) назвемо кількість кроків виконуваних алгоритмом в гіршому випадку. Вона є функцією від розмірності задачі, представленої вхідними даними. Наприклад, для графу, що задається списками інцидентності, розмірність задачі представляється як пара (n, m). Складність алгоритму визначається, як функція f, така, що f (n, m) дорівнює числу кроків алгоритму для довільного графу з n вершинами і m ребрами. Під кроком алгоритму розуміється машинна команда, і при такому визначенні кроку обчислювальна складність залежить від конкретної системи команд і способу трансляції. Нас же буде надалі цікавити не точна складність алгоритму, обчислення якої практично неможливо, а асимптотична складність, яка визначається швидкістю росту числа кроків алгоритму при необмеженому збільшенні розмірності задачі. Крім того, обчислювальна складність алгоритму, обчислена при різних системах команд або способах трансляції, відрізняються один від одного в p разів, де p — речова константа, а їх швидкість росту однакова. Для порівняння швидкості росту двох функцій f(n) i g(n) будемо використовувати позначення f(n) = O[g(n)] або f(n) = Ω[g(n)]. Будемо говорити, що функція f(n) має порядок зростання не більше, ніж функція g(n), що позначається f(n) = O[g(n)], тоді і тільки тоді, коли існують C = const і N > 0, такі, що |f(n)| <= C|g(n)| n>= N Будемо говорити, що функція f(n) має порядок зростання не менше, ніж функція g(n), що позначається f(n) = Ω[g(n)], тоді і тільки тоді, коли існують C = const і N > 0, такі, що |f(n)| >= C|g(n)| n>= N Оцінимо обчислювальну складність рекурсивного варіанту алгоритму пошуку у глибину. O(n) + O(2m) = O(n) + O(m) = O(n+m)
Псевдокод
Рекурсивна версія алгоритму:
def dfs(v): помітити v як відвідану обійти-в-прямому-порядку(v) для всіх ребер i інцидентних до v таких що i не відвідано dfs(i) обійти-в-зворотному-порядку(v)
Версія без рекурсії:
dfs(граф G) { список L = порожній дерево T = порожнє обрати початкове ребро x пошук(x) поки(L не порожній) { видалити ребро (v, w) з голови L якщо w не відвідано { додати (v, w) до T пошук(w) } } } пошук(вершина v) { відвідати v для кожного ребра (v, w) додати ребро (v, w) на початок L }
Див. також
Примітки
- Т. Кормен; Ч. Лейзерсон; Р. Рівест; К. Стайн (2009) [1990]. 22.3 Пошук вглиб. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algori tm po shuku v glibinu angl Depth first search DFS algoritm dlya obhodu dereva strukturi podibnoyi do dereva abo grafu Robota algoritmu pochinayetsya z korenya dereva abo inshoyi obranoyi vershini v grafi i zdijsnyuyetsya obhid v maksimalno mozhlivu glibinu do perehodu na nastupnu vershinu Poshuk u glibinuPoryadok obhodu vershin KlasAlgoritm poshukuStruktura danihGrafNajgirsha shvidkodiyaO V E displaystyle O V E Prostorova skladnist u najgirshomu vipadkuO V displaystyle O V OpisNehaj G V E prostij zv yaznij graf usi vershini yakogo poznacheno poparno riznimi simvolami U procesi poshuku vglib vershinami grafu G nadayut nomeri DFS nomeri ta pevnim sposobom danih dlya zberezhennya mnozhin yaku nazivayut stekom Zi steku mozhna viluchiti tilki toj element kotrij bulo dodano do nogo ostannim stek pracyuye za principom ostannij prijshov pershij vijshov LIFO Inakshe kazhuchi dodavannya j viluchennya elementiv u steku vidbuvayetsya z odnogo kincya yakij nazivayetsya verhivkoyu steku DFS nomeri vershini h poznachayut DFS h AlgoritmCej rozdil ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cej rozdil dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2021 Navedemo kroki algoritmu Pochati z dovilnoyi vershini v Vikonati DFS v 1 Vklyuchiti cyu vershinu v stek Rozglyanuti vershinu u verhivci steku nehaj ce vershina h Yaksho vsi rebra incidentni vershini h poznacheno to perejti do kroku 4 inakshe do kroku 3 Nehaj x y nepoznachene rebro Yaksho DFS u uzhe viznacheno to poznachiti rebro x y shtrihovoyu liniyeyu ta perejti do kroku 2 Yaksho DFS u ne viznacheno to poznachiti rebro x y potovshenoyu sucilnoyu liniyeyu viznachiti DFS u yak chergovij DFS nomer vklyuchiti cyu vershinu v stek i perejti do kroku 2 Viklyuchiti vershinu h zi steku Yaksho stek porozhnij to zupinitis inakshe perejti do kroku 2 Obchislyuvalna skladnist algoritmuObchislyuvalnoyu skladnistyu algoritmu abo prosto skladnistyu nazvemo kilkist krokiv vikonuvanih algoritmom v girshomu vipadku Vona ye funkciyeyu vid rozmirnosti zadachi predstavlenoyi vhidnimi danimi Napriklad dlya grafu sho zadayetsya spiskami incidentnosti rozmirnist zadachi predstavlyayetsya yak para n m Skladnist algoritmu viznachayetsya yak funkciya f taka sho f n m dorivnyuye chislu krokiv algoritmu dlya dovilnogo grafu z n vershinami i m rebrami Pid krokom algoritmu rozumiyetsya mashinna komanda i pri takomu viznachenni kroku obchislyuvalna skladnist zalezhit vid konkretnoyi sistemi komand i sposobu translyaciyi Nas zhe bude nadali cikaviti ne tochna skladnist algoritmu obchislennya yakoyi praktichno nemozhlivo a asimptotichna skladnist yaka viznachayetsya shvidkistyu rostu chisla krokiv algoritmu pri neobmezhenomu zbilshenni rozmirnosti zadachi Krim togo obchislyuvalna skladnist algoritmu obchislena pri riznih sistemah komand abo sposobah translyaciyi vidriznyayutsya odin vid odnogo v p raziv de p rechova konstanta a yih shvidkist rostu odnakova Dlya porivnyannya shvidkosti rostu dvoh funkcij f n i g n budemo vikoristovuvati poznachennya f n O g n abo f n W g n Budemo govoriti sho funkciya f n maye poryadok zrostannya ne bilshe nizh funkciya g n sho poznachayetsya f n O g n todi i tilki todi koli isnuyut C const i N gt 0 taki sho f n lt C g n n gt N Budemo govoriti sho funkciya f n maye poryadok zrostannya ne menshe nizh funkciya g n sho poznachayetsya f n W g n todi i tilki todi koli isnuyut C const i N gt 0 taki sho f n gt C g n n gt N Ocinimo obchislyuvalnu skladnist rekursivnogo variantu algoritmu poshuku u glibinu O n O 2m O n O m O n m PsevdokodRekursivna versiya algoritmu def dfs v pomititi v yak vidvidanu obijti v pryamomu poryadku v dlya vsih reber i incidentnih do v takih sho i ne vidvidano dfs i obijti v zvorotnomu poryadku v Versiya bez rekursiyi dfs graf G spisok L porozhnij derevo T porozhnye obrati pochatkove rebro x poshuk x poki L ne porozhnij vidaliti rebro v w z golovi L yaksho w ne vidvidano dodati v w do T poshuk w poshuk vershina v vidvidati v dlya kozhnogo rebra v w dodati rebro v w na pochatok L Div takozhSpisok algoritmiv Poshuk v glibinu z iterativnim zagliblennyam Poshuk u shirinu Dvonapravlenij poshuk Obhid derevaPrimitkiT Kormen Ch Lejzerson R Rivest K Stajn 2009 1990 22 3 Poshuk vglib Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi