ગ્રાફ સર્ચ અલ્ગોરિધમ એ ગ્રાફ પ્રોસેસિંગ અને માહિતી પુનઃપ્રાપ્તિના ક્ષેત્રમાં એક મૂળભૂત તકનીક છે. આ અલ્ગોરિધમ ચોક્કસ નિયમો અથવા શોધ અલ્ગોરિધમ્સના આધારે ગ્રાફમાં પાથ અથવા ઘટકો શોધવા માટે અમને સક્ષમ કરે છે.
તે કેવી રીતે કામ કરે છે
- ગ્રાફમાં ચોક્કસ શિરોબિંદુ(નોડ) થી પ્રારંભ કરો.
- ચોક્કસ નિયમોના આધારે શોધ પ્રક્રિયા કરો, જેમ કે ડેપ્થ-ફર્સ્ટ સર્ચ(DFS) અથવા બ્રેડથ-ફર્સ્ટ સર્ચ(BFS).
- લક્ષ્ય અથવા ઑબ્જેક્ટ શોધવા માટે ગ્રાફના શિરોબિંદુઓ અને કિનારીઓને પાર કરો.
- પાથ અથવા શોધ પરિણામો રેકોર્ડ કરો.
ઉદાહરણ
નીચેના ગ્રાફને ધ્યાનમાં લો:
A -- B -- C -- E
| |
D --------
અમે ડેપ્થ-ફર્સ્ટ સર્ચ(DFS) અલ્ગોરિધમનો ઉપયોગ કરીને આ ગ્રાફમાં શિરોબિંદુ A થી શિરોબિંદુ E સુધીનો માર્ગ શોધવા માંગીએ છીએ.
- શિરોબિંદુ A થી પ્રારંભ કરો.
- શિરોબિંદુ B પર જાઓ.
- શિરોબિંદુ C પર ચાલુ રાખો.
- C માં કોઈ પડોશીઓ નથી, શિરોબિંદુ B પર પાછા જાઓ.
- શિરોબિંદુ D પર જાઓ.
- શિરોબિંદુ A પર ચાલુ રાખો(જેમ કે D A સાથે જોડાયેલ છે).
- શિરોબિંદુ B પર જાઓ.
- શિરોબિંદુ C પર જાઓ.
- શિરોબિંદુ 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 સુધીનો માર્ગ બનાવતા શિરોબિંદુઓનો ક્રમ હશે.