Middle
Кеңдик боюнча издөө алгоритми эмне?
sobes.tech AI
AIден жооп
Кеңейтүү биринчи издөө алгоритми (BFS - Breadth-First Search) — бул дарак же графда өтүү же издөө алгоритми. Ал түпкү түйүндөн (же граф дарак эмес болсо, кез келген түйүндөн) баштап, анын бардык түздөн-түз көршүлөрүн изилдейт, андан кийин ошол көршүлөрдүн көршүлөрүн жана ошондой эле улантат, деңгээл боюнча. BFS кезек колдонуу менен ишке ашырылат.
Ишке ашыруу принциби:
- Баштапкы түйүндү кезекке салыңыз.
- Кезек бош эмес болгончө:
- Түйүндү кезектен чыгарыңыз.
- Эгер түйүн издөөдө болсо, издөөнү токтотуңуз.
- Болбосо, анын бардык көрбөгөн көршүлөрүн кезекке салыңыз жана аларды көрүлгөн деп белгилеңиз.
Мүнөздөмөлөр:
- Толуктук: Эгер бар болсо, чечим табылуусун кепилдейт.
- Оптималдык: Бейтаң салмактуу графда эң кыска жолду табат (жолдун салмактары бирдей).
- Убакытттык татаалдык: графтын түзүлүшүнө көз каранды, E кыры жана V чокусу үчүн — O(V + E).
- Эстутум татаалдык: О(V) эң жаман учур, анткени көрүлгөн чокулары жана кезек сакталат.
QAда колдонмолор:
- Тест сценарийлеринде түйүндөр аралыгындагы эң кыска жолду издөө.
- Жабык автоматтардын системасынын бардык жеткиликтүү абалдарын изилдөө.
- Crawl учурунда веб-сайттын бардык баракчаларынын жеткиликтүүлүгүн текшерүү.
Мисал (ағашты өтүү):
from collections import deque
# Ағашты көрсөтүү үчүн көршү тизмеси катары мисал
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
def bfs(graph, start_node):
visited = set()
queue = deque([start_node])
visited.add(start_node)
while queue:
node = queue.popleft()
print(node)
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# Мисал чакыруу
# bfs(graph, 'A')
# Натыйжа:
# A
# B
# C
# D
# E
# F