Depth-First Search (DFS) হলো একটি গ্রাফ বা ট্রি অনুসন্ধান অ্যালগরিদম, যা প্রথমে একটি শাখার শেষ পর্যন্ত অনুসন্ধান করে এবং তারপর ফিরে এসে অন্য শাখার দিকে অগ্রসর হয়। এটি মূলত Stack ডেটা স্ট্রাকচার ব্যবহার করে, যেখানে একটি নোড পরিদর্শন করার পর তার সব অবাঞ্ছিত (unvisited) সন্তান নোডগুলোকে স্ট্যাকের উপরে রাখা হয়।
def dfs(graph, node, visited):
if node not in visited:
print(node, end=" ")
visited.add(node)
for neighbor in graph[node]:
dfs(graph, neighbor, visited)
# গ্রাফটি
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
visited = set()
dfs(graph, 'A', visited)
এই কোডটি A
নোড থেকে শুরু করে প্রতিটি নোডে DFS অনুসরণ করে চলে। প্রতিটি নোড একবার করে পরিদর্শন করা হবে।
Breadth-First Search (BFS) হলো একটি গ্রাফ বা ট্রি অনুসন্ধান অ্যালগরিদম, যা প্রথমে একটি নির্দিষ্ট নোড থেকে শুরু করে তার আশেপাশের নোডগুলোকে পরিদর্শন করে এবং এরপর পর্যায়ক্রমে আরো দূরের নোডগুলোতে অগ্রসর হয়। এটি Queue ডেটা স্ট্রাকচার ব্যবহার করে, যেখানে প্রথমে প্রবেশ করা নোডটি প্রথমে বের হয়।
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[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
# গ্রাফটি
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
bfs(graph, 'A')
এই কোডটি A
নোড থেকে শুরু করে প্রতিটি নোডে BFS অনুসরণ করে চলে এবং পরম্পরাগতভাবে নোডগুলো পরিদর্শন করা হয়।
বৈশিষ্ট্য | DFS | BFS |
---|---|---|
ডেটা স্ট্রাকচার | Stack | Queue |
গতি | দ্রুত গহীনে খোঁজে | প্রথমে আশেপাশের নোড খোঁজে |
ব্যবহার | সাইকেল ডিটেকশন, পথ খোঁজা | শর্টেস্ট পাথ, ওয়েব ক্রলিং |
সম্পূর্ণতা | সম্পূর্ণ নয় | সম্পূর্ণ |
DFS এবং BFS উভয়ই গ্রাফ ও ট্রি অনুসন্ধানে ব্যবহৃত হয় তবে বিভিন্ন ক্ষেত্রে এদের ব্যবহার ও কার্যকারিতা ভিন্ন।
Read more