গ্রাফ অনুসন্ধান অ্যালগরিদম গ্রাফ প্রক্রিয়াকরণ এবং তথ্য পুনরুদ্ধারের ক্ষেত্রে একটি মৌলিক কৌশল। এই অ্যালগরিদম আমাদেরকে নির্দিষ্ট নিয়ম বা অনুসন্ধান অ্যালগরিদমের উপর ভিত্তি করে একটি গ্রাফে পাথ বা উপাদানগুলি খুঁজে পেতে সক্ষম করে।
কিভাবে এটা কাজ করে
- গ্রাফে একটি নির্দিষ্ট শীর্ষবিন্দু(নোড) থেকে শুরু করুন।
- নির্দিষ্ট নিয়মের উপর ভিত্তি করে অনুসন্ধান প্রক্রিয়া সম্পাদন করুন, যেমন ডেপথ-ফার্স্ট সার্চ(DFS) বা ব্রেডথ-ফার্স্ট সার্চ(BFS)।
- লক্ষ্য বা বস্তুর সন্ধান করতে গ্রাফের শীর্ষবিন্দু এবং প্রান্ত অতিক্রম করুন।
- পথ বা অনুসন্ধান ফলাফল রেকর্ড করুন.
উদাহরণ
নিম্নলিখিত গ্রাফ বিবেচনা করুন:
A -- B -- C -- E
| |
D --------
আমরা ডেপথ-ফার্স্ট সার্চ(DFS) অ্যালগরিদম ব্যবহার করে এই গ্রাফে শীর্ষবিন্দু A থেকে শীর্ষবিন্দু E পর্যন্ত একটি পথ খুঁজে পেতে চাই।
- শীর্ষবিন্দু A থেকে শুরু করুন।
- বি শীর্ষবিন্দুতে যান।
- সি শীর্ষবিন্দুতে চালিয়ে যান।
- C-তে কোনো প্রতিবেশী নেই, শীর্ষবিন্দু B-এর পিছনে।
- শীর্ষবিন্দুতে যান D.
- শীর্ষবিন্দু A এ চালিয়ে যান(যেমন D A এর সাথে সংযুক্ত)।
- বি শীর্ষবিন্দুতে যান।
- সি শীর্ষবিন্দুতে যান।
- শীর্ষবিন্দু E এ যান।
A থেকে E এর পথ A -> B -> C -> E।
C++ এ উদাহরণ কোড
#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
class Graph {
public:
void addEdge(char from, char to);
std::vector<char> depthFirstSearch(char start, char end);
private:
std::unordered_map<char, std::vector<char>> adjList;
};
void Graph::addEdge(char from, char to) {
adjList[from].push_back(to);
adjList[to].push_back(from);
}
std::vector<char> Graph::depthFirstSearch(char start, char end) {
std::vector<char> path;
std::unordered_map<char, char> parent;
std::stack<char> stack;
stack.push(start);
parent[start] = '\0';
while(!stack.empty()) {
char current = stack.top();
stack.pop();
if(current == end) {
// Build the path from end to start using the parent map
char node = end;
while(node != '\0') {
path.insert(path.begin(), node);
node = parent[node];
}
break;
}
for(char neighbor: adjList[current]) {
if(parent.find(neighbor) == parent.end()) {
parent[neighbor] = current;
stack.push(neighbor);
}
}
}
return path;
}
int main() {
Graph graph;
graph.addEdge('A', 'B');
graph.addEdge('A', 'D');
graph.addEdge('B', 'C');
graph.addEdge('C', 'E');
graph.addEdge('D', 'B');
char start = 'A';
char end = 'E';
std::vector<char> path = graph.depthFirstSearch(start, end);
std::cout << "Path from " << start << " to " << end << ": ";
for(char node: path) {
std::cout << node << ";
}
std::cout << std::endl;
return 0;
}
এই উদাহরণে, আমরা গ্রাফে শীর্ষবিন্দু A থেকে শীর্ষবিন্দু E পর্যন্ত একটি পথ খুঁজে পেতে DFS অ্যালগরিদম ব্যবহার করি। ফলাফল A থেকে E পর্যন্ত পথ তৈরি করে শীর্ষবিন্দুগুলির একটি ক্রম হবে।