Қарапайым сөзбен айтқанда, графты айналып өту-бұл
шыңдардың байланыс қасиеттерін іздеуде оның бір
шыңынан екіншісіне өту. Байланыстар (шыңдарды
байланыстыратын сызықтар) графтың бағыттары,
жолдары, беттері немесе шеттері деп аталады. Графтың
шыңдары түйіндер деп те аталады.
Графты айналып өту дегеніміз не?
Екі алгоритм де графты айналып өту
үшін қолданылғанымен, олардың кейбір
айырмашылықтары бар.
Графты айналып өтудің екі негізгі алгоритмі-
тереңдікті іздеу (Depth-First Search, DFS) және ені
бойынша іздеу (Breadth-First Search, BFS).
DFS "тереңірек сүңгу, алға бас" тұжырымдамасын
ұстанады ("go deep, head first"). Басты иедясы мынада:
біз бастапқы шыңнан (нүктеден, орыннан) белгілі бір
бағытта (белгілі бір жолмен) жолдың соңына немесе
межелі жерге (қалаған шыңға) жеткенше қозғаламыз.
Егер біз жолдың соңына жеткен болсақ, бірақ ол
баратын жер болмаса, онда біз артқа (жолдардың
тармақталу немесе алшақтық нүктесіне) оралып, басқа
жолмен жүреміз.
Біз "s" нүктесіндеміз және "t"шыңын табуымыз керек. DFS
қолдану арқылы біз мүмкін жолдардың бірін зерттейміз, оны
соңына дейін жылжытамыз және егер t анықталмаса, қайтып
ораламыз және басқа жолды зерттейміз. Процесс осылай көрінеді:
Мұнда біз (p1) ең жақын шыңға қарай жүреміз және бұл жолдың
соңы емес екенін көреміз. Сондықтан біз келесі шыңға көшеміз.
Мы достигли конца p1, но не нашли t, поэтому возвращаемся в s и
двигаемся по второму пути.
"P2" жолының ең жақын "s" шыңына жеткенде, біз одан әрі
қозғалудың үш мүмкін бағытын көреміз. Біз бірінші бағытта
тупикка барғандықтан, біз екінші бағытта қозғаламыз.
Біз қайтадан жолдың соңына жеттік, бірақ t таппадық,
сондықтан біз қайтып келеміз. Біз үшінші жолмен жүреміз
және соңында қажетті "t"шыңына жетеміз.
DFS осылай жұмыс істейді. Соңына дейін белгілі бір
жолмен жүреміз. Егер жолдың соңы сіз іздеген шың болса,
біз аяқтаймыз. Егер жоқ болса, біз барлық нұсқаларды
зерттегенше артқа оралып, басқа жолмен жүреміз.Біз бұл
алгоритмді әр шыңға қатысты қолданамыз.Процедураны
бірнеше рет қайталау қажеттілігі алгоритмді жүзеге асыру
үшін рекурсияны қолдану қажеттілігін көрсетеді.
BFS "құстардың биіктігіне көтерілу арқылы кеңею"
тұжырымдамасын ұстанады ("go wide, bird ' s eye-view"). Соңына
дейін белгілі бір жолмен жүрудің орнына, BFS бір уақытта бір
көршімен алға жылжуды қамтиды. Бұл мынаны білдіреді:
Жол бойында жүрудің орнына, BFS бір әрекетте (қадамда) s-ге
жақын көршілерге баруды, содан кейін көршілердің
көршілеріне баруды және т анықталғанға дейін баруды
білдіреді.
Келесі сұрақ туындайды: алдымен қандай көршілерге бару
керектігін қалай білуге болады?Ол үшін біз "бірінші кіру,
бірінші шығу" (first-in-first-out, FIFO) тұжырымдамасын
кезектен (queue) пайдалана аламыз. Біз алдымен бізге ең
жақын шыңды, содан кейін оның келмеген көршілерін
кезекке қоямыз және бұл процесті кезек бос болғанша
немесе біз іздеген шыңды тапқанша жалғастырамыз.
Тереңдікті іздеу және ені бойынша іздеу графты айналып
өту үшін қолданылады.DFS алға-артқа жылжиды, ал BFS
мақсатты іздеу үшін көршілеріне таралады.DFS стекті, ал
BFS кезекті пайдаланады.Екеуінің де жұмыс уақыты O(V +
E), ал кеңістіктік күрделілік O(V).Бұл алгоритмдердің
философиясы әртүрлі, бірақ графтармен жұмыс істеу үшін
бірдей маңызды.
Қорытынды