Jump to content

Փնտրում դեպի խորություն

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Փնտրում դեպի խորություն
Տեսակuninformed search algorithm?
Դասgraph traversal?
Տվյալների կառուցվածքԳրաֆ
Օգտագործում էգրաֆ


Փնտրում դեպի խորություն Գրաֆը շրջանցելու մեթոդներից մեկը։ Ալգորիթմի ստրատեգիան, ինչպես հետևում է անվանումից՝ գնալ դեպի խորություն որքան որ հնարավոր է։ Որոնման ալգորիթմը նկարագրվում է ռեկուրսիվ՝ հերթով վերցվում է հանգույցից դուրս եկող բոլոր արմատները։ Եթե կողը տանում է դեպի չբացահայտված հանգույցը, ապա ալգորիթմը վերսկսում ենք այդ հանգույցից, հետո վերադառնում ենք և վերցնում ենք մյուս արմատները։ Վերադարձը կատարվում է այն ժամանակ, երբ դիտարկվող գագաթում չեն մնացել կողեր, որոնք տանում են դեպի չբացահայտված գագաթներ։ Եթե ալգորիթմի ավարտից հետո դեռ մնացել են չբացահայտված հանգույցներ, ապա ալգորիթմը պետք է կիրառել չբացահայտված հանգույցներից որևէ մեկից սկսած։

Խորության փնտրման ալգորիթմ[խմբագրել | խմբագրել կոդը]

Տրված է գրաֆ , որտեղ -ն գրաֆի գագաթների բազմությունն է, -ն՝ կողերի բազմությունը։ Ենթադրենք, որ սկզբում բոլոր գագաթները ներկված են սպիտակ գույնով։ Կատարենք հետևյալ քայլերը։

  1. Անցնենք բոլոր գագաթներով ։
    • Եթե գագաթը սպիտակ է, կատարում ենք նրա համար DFS(v).

Ֆունկցիա DFS (պարամետր — գագաթ )

  1. Ներկում ենք գագաթը մոխրագույն գույնով։
  2. Ինչ-որ գագաթ,որը գագաթի հարևանն է և ներկված է սպիտակ գույնով, ռեկուրսիվ կատարում ենք DFS(w) ֆունկցիան։
  3. Ներկում ենք գագաթը սև գույնով։

Ոչ ռեկուրսիվ տարբերակ[խմբագրել | խմբագրել կոդը]

DFS-ի ոչ ռեկուրսիվ օգտագործման տարբերակը։

1 ֆունկցիա DFS-iterative(G,v)։
2 S սթեք է
3 S.push(v)
4 while S դատարկ չէ
5  v = S.pop()
6  if v եթե բացահայտված չէ ԵՎ սթեքի մեջ չէ։
7  Նշել v, որպես բացահայտված
8  for all բոլոր արմատների համար vմինչև w in G.հարևանարմատ(v) do
9   if w բացահայտված չէ         ։    S.push(w)

Կիրառություն[խմբագրել | խմբագրել կոդը]

Վիքիպահեստն ունի նյութեր, որոնք վերաբերում են «Փնտրում դեպի խորություն» հոդվածին։