✅ جستجوی عمقی (DFS - Depth First Search)
✅ جستجوی سطحی (BFS - Breadth First Search)
هر یک از این روشها در موقعیتهای مختلف کارایی متفاوتی دارند و انتخاب صحیح آنها میتواند تأثیر بسزایی در بهینهسازی عملکرد الگوریتمها داشته باشد.
🔶 جستجوی عمقی (DFS) | حرکت در عمق و بررسی مسیرهای طولانیتر:
یک روش بازگشتی یا استکی برای پیمایش گراف است که ابتدا تا جای ممکن در یک مسیر به عمق میرود و در صورت نیاز، عقبگرد (Backtrack) انجام میدهد.
💡 کاربردهای DFS در دنیای واقعی:
🔹 حل مسائل مسیریابی در مارپیچها و مازها
🔹 تحلیل شبکههای اجتماعی (مثلاً شناسایی گروههای مرتبط)
🔹 تشخیص وجود دور (Cycle Detection) در گراف
🔹 حل مسائل منطقی و معمایی مانند سودوکو
📌 کد سادهی پایتون برای پیادهسازی DFS:
def dfs(graph, node, visited=None):
if visited is None:
visited = set()
visited.add(node)
print(node, end=" ") # نمایش ترتیب پیمایش گرهها
for neighbor in graph.get(node, []):
if neighbor not in visited:
dfs(graph, neighbor, visited)
# تعریف یک گراف نمونه
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B', 'H'],
'F': ['C'],
'G': ['C'],
'H': ['E']
}
print("DFS Traversal:")
dfs(graph, 'A')
🔶 جستجوی سطحی (BFS) | پیمایش سطربهسطر و بررسی گرههای نزدیکتر:
یک روش صفمحور (Queue-based) است که ابتدا گرههای مجاور را بررسی کرده و سپس به سراغ سطوح پایینتر میرود.
💡 کاربردهای BFS در دنیای واقعی:
🔹 پیدا کردن کوتاهترین مسیر در گرافهای بدون وزن (مانند مسیریابی در سامانههای ناوبری)
🔹 تحلیل شبکههای اجتماعی (برای یافتن کوتاهترین ارتباط بین دو فرد)
🔹 ساخت خزندههای وب (Web Crawlers) برای ایندکس صفحات اینترنتی
🔹 حل مسائل مسیریابی و بازیهایی مانند شطرنج
📌 کد سادهی پایتون برای پیادهسازی BFS:
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
print(node, end=" ") # نمایش ترتیب پیمایش گرهها
for neighbor in graph.get(node, []):
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# تعریف یک گراف نمونه
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B', 'H'],
'F': ['C'],
'G': ['C'],
'H': ['E']
}
print("\nBFS Traversal:")
bfs(graph, 'A')
🔷 کدام الگوریتم مناسبتر است؟
✔️ در صورتی که نیاز به یافتن سریعترین مسیر در گرافهای بدون وزن دارید، BFS گزینه بهتری است.
✔️ اگر بررسی تمام مسیرهای ممکن برای شما اهمیت دارد، DFS انتخاب مناسبتری خواهد بود.
انجمن علمی مهندسی کامپیوتر دانشگاه مازندران
🆔 @Umz_Computer
📌 ویدیو را مشاهده کنید و ببینید چگونه هر الگوریتم مسیر خود را در گراف پیدا میکند.