ट्रान्सपोज ग्राफ



वारंवार विचारले ऐक्सचर ऍमेझॉन जेपी मॉर्गन मायक्रोसॉफ्ट झिकस
मूलभूत सायपोग्राफी आलेख

समस्या विधान

“ट्रान्सपोज ग्राफ” ही समस्या सांगते की आपल्याला आलेख देण्यात आला आहे आणि आपल्याला दिलेला ट्रान्सपोज शोधणे आवश्यक आहे आलेख.

हस्तांतरण: निर्देशित आलेख हस्तांतरित करणे त्याच किनार व नोड कॉन्फिगरेशनसह दुसरा आलेख तयार करते परंतु सर्व कडा दिशा बदलली आहेत.

उदाहरण

ट्रान्सपॉज आलेख

ट्रान्सपोज आलेख शोधण्यासाठी समाधानाचे प्रकार

जवळपासची यादी

दृष्टीकोन

आलेखाच्या प्रत्येक नोडची ट्रॅव्हर्स निकटवर्ती यादी. म्हणा, नोड आहे u, च्या समीप सूचीमध्ये आता प्रत्येक नोडला जा u. म्हणा, नोड आहे v (म्हणजे आपण -> व्ही). ट्रान्सपोज ग्राफमध्ये जोडा u च्या निकटवर्ती यादी v (तेथे व्हीपासून यू पर्यंतचे अस्तित्व आणि धार आहे म्हणजे v -> u). ट्रान्सपोज्ड आलेख प्राप्त होईपर्यंत ग्राफमधील सर्व नोड्स (आणि त्यांच्या संबंधित संबद्ध सूची) साठी ही प्रक्रिया पुन्हा करा.

ट्रान्सपॉज आलेख

कोड

ट्रान्सपोज आलेख शोधण्यासाठी सी ++ प्रोग्राम
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

// Add Edge from node u to v
void addEdge(vector <int> graph[], int u, int v)
{
    graph[u].push_back(v);
}

int main()
{
    // Construct the Given graph
    int n = 7;
    vector <int> graph[n];
    vector<pair<int,int>> edges = {{0,1},{0,2},{3,2},{3,4},{4,5},{6,5},{6,0}};
    
    for(auto e : edges)
    addEdge(graph,e.first,e.second);
    
    // Print Adjacency list of given Graph
    cout<<"The Adjacency List of Given Graph "<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<i<<"->";
        for(auto node : graph[i])
        cout<<node<<" ";
        
        cout<<endl;
    }
    
    // Obtain transpose of the given graph
    vector <int> transpose[n];
    for(int i=0;i<n;i++)
    {
        for(auto node : graph[i])
        addEdge(transpose,node,i);
    }
    
    // Print Adjacency list of the Transpose
    cout<<endl<<"The Adjacency List of Transpose Graph "<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<i<<"->";
        for(auto node : transpose[i])
        cout<<node<<" ";
        
        cout<<endl;
    }
    
    return 0;
}
The Adjacency List of Given Graph 
0->1 2 
1->
2->
3->2 4 
4->5 
5->
6->5 0 

The Adjacency List of Transpose Graph 
0->6 
1->0 
2->0 3 
3->
4->3 
5->4 6 
6->
ट्रान्सपोज आलेख शोधण्यासाठी जावा प्रोग्राम
import java.util.*;
import java.io.*;

class TutorialCup
{
    // Add Edge from node u to v
    static void addEdge(ArrayList<ArrayList<Integer>> graph, int u, int v)
    {
        graph.get(u).add(v);
    }
    
    public static void main (String[] args)
    {
        // Construct the Given graph
        int n = 7;
        ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
        
        for(int i=0;i<n;i++)
        graph.add(new ArrayList<Integer>());
        
        int [][] edges = {{0,1},{0,2},{3,2},{3,4},{4,5},{6,5},{6,0}};
        
        for(int i=0;i<edges.length;i++)
        addEdge(graph,edges[i][0],edges[i][1]);
        
        // Print Adjacency list of given Graph
        System.out.println("The Adjacency List of Given Graph ");
        for(int i=0;i<n;i++)
        {
            System.out.print(i+"->");
            
            Iterator itr = graph.get(i).iterator();
            
            while(itr.hasNext())
            {
                int node = (Integer)itr.next();
                System.out.print(node+" ");
            }
            
            System.out.println();
        }
        
        // Obtain transpose of the given graph
        ArrayList<ArrayList<Integer>> transpose = new ArrayList<>();
        
        for(int i=0;i<n;i++)
        transpose.add(new ArrayList<Integer>());
        
        for(int i=0;i<n;i++)
        {
            Iterator itr = graph.get(i).iterator();
            
            while(itr.hasNext())
            {
                int node = (Integer)itr.next();
                addEdge(transpose,node,i);
            }
        }
        
        // Print Adjacency list of the Transpose
        System.out.println("\nThe Adjacency List of Transpose Graph ");
        for(int i=0;i<n;i++)
        {
            System.out.print(i+"->");
            
            Iterator itr = transpose.get(i).iterator();
            
            while(itr.hasNext())
            {
                int node = (Integer)itr.next();
                System.out.print(node+" ");
            }
            
            System.out.println();
        }
        
    }
}
The Adjacency List of Given Graph 
0->1 2 
1->
2->
3->2 4 
4->5 
5->
6->5 0 

The Adjacency List of Transpose Graph 
0->6 
1->0 
2->0 3 
3->
4->3 
5->4 6 
6->

समीप सूची वापरून ट्रान्सपोज आलेखासाठी जटिलता विश्लेषण

  1. वेळ कॉम्प्लेक्सिटी: टी (एन) = ओ (व्ही + ई), समीप सूचीच्या पुनरावृत्ती ट्रॅव्हर्सल. कारण आम्ही ग्राफमधील सर्व नोड्सवर आत्ताच गेलो आहोत.
  2. स्पेस कॉम्प्लेक्सिटी: ए (एन) = ओ (व्ही + ई), कारण आम्हाला ट्रान्सपोज आलेख संचयित करण्यासाठी नवीन संलग्न सूचीची आवश्यकता आहे.

व्ही = आलेखातील शिरोबिंदूंची संख्या.

E = आलेखामधील किनारांची संख्या.

अ‍ॅडजेसीन्सी मॅट्रिक्स

दृष्टीकोन

द्वारा परिभाषित आलेखाचे स्थानांतरण एनएक्सएन निकटवर्ती मॅट्रिक्स (जेथे n = नोड्सची संख्या) हे मॅट्रिक्स ट्रान्सपोज आहे.

अल्गोरिदम

  1. निकटवर्ती मॅट्रिक्स वापरुन आलेख परिभाषित करा.
  2. दिलेल्या आलेखाची ट्रान्सपोज मिळवण्यासाठी समीपच्या मॅट्रिक्सची ट्रान्सपोज करा.

ट्रान्सपॉज आलेख

कोड

ट्रान्सपोज आलेख शोधण्यासाठी सी ++ प्रोग्राम
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    // Define The Adjacency Matrix
    vector<vector<int>> graph = {{0,1,1,0,0,0,0},
                                {0,0,0,0,0,0,0},
                                {0,0,0,0,0,0,0},
                                {0,0,1,0,1,0,0},
                                {0,0,0,0,0,1,0},
                                {0,0,0,0,0,0,0},
                                {1,0,0,0,0,1,0}};
    
    cout<<"Adjacency Matrix of Given Graph."<<endl;
    
    for(auto node : graph)
    {
        for(auto neighbor : node)
        cout<<neighbor<<" ";
        
        cout<<endl;
    }
    
    // Perform Matrix Transpose
    for(int i=0;i<graph.size();i++)
    {
        for(int j=i+1;j<graph[0].size();j++)
        swap(graph[i][j],graph[j][i]);
    }
    
    // Print the Matrix Transpose
    cout<<"\nAdjacency Matrix of Transpose Graph."<<endl;
    for(auto node : graph)
    {
        for(auto neighbor : node)
        cout<<neighbor<<" ";
        
        cout<<endl;
    }
    
    return 0;
}
Adjacency Matrix of Given Graph.
0 1 1 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 1 0 1 0 0 
0 0 0 0 0 1 0 
0 0 0 0 0 0 0 
1 0 0 0 0 1 0 

Adjacency Matrix of Transpose Graph.
0 0 0 0 0 0 1 
1 0 0 0 0 0 0 
1 0 0 1 0 0 0 
0 0 0 0 0 0 0 
0 0 0 1 0 0 0 
0 0 0 0 1 0 1 
0 0 0 0 0 0 0 
ट्रान्सपोज आलेख शोधण्यासाठी जावा प्रोग्राम
import java.util.*;
import java.io.*;

class TutorialCup
{
    public static void main (String[] args)
    {
        // Define The Adjacency Matrix
        int [][] graph =            {{0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0},
                                    {0,0,1,0,1,0,0},
                                    {0,0,0,0,0,1,0},
                                    {0,0,0,0,0,0,0},
                                    {1,0,0,0,0,1,0}};
        
        System.out.println("Adjacency Matrix of Given Graph.");
        
        for(int i=0;i<graph.length;i++)
        {
            for(int j=0;j<graph[0].length;j++)
            System.out.print(graph[i][j]+" ");
            
            System.out.println();
        }
        
        // Perform Matrix Transpose
        for(int i=0;i<graph.length;i++)
        {
            for(int j=i+1;j<graph[0].length;j++)
            {
                int temp = graph[i][j];
                graph[i][j] = graph[j][i];
                graph[j][i] = temp;
            }
        }
        
        // Print the Matrix Transpose
        System.out.println("\nAdjacency Matrix of Transpose Graph.");
        for(int i=0;i<graph.length;i++)
        {
            for(int j=0;j<graph[0].length;j++)
            System.out.print(graph[i][j]+" ");
            
            System.out.println();
        }
    }
}
Adjacency Matrix of Given Graph.
0 1 1 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 1 0 1 0 0 
0 0 0 0 0 1 0 
0 0 0 0 0 0 0 
1 0 0 0 0 1 0 

Adjacency Matrix of Transpose Graph.
0 0 0 0 0 0 1 
1 0 0 0 0 0 0 
1 0 0 1 0 0 0 
0 0 0 0 0 0 0 
0 0 0 1 0 0 0 
0 0 0 0 1 0 1 
0 0 0 0 0 0 0

निकटवर्ती मॅट्रिक्सचा वापर करून ट्रान्सपोज आलेखासाठी जटिलता विश्लेषण

  1. वेळ कॉम्प्लेक्सिटी: टी (एन) = ओ (व्ही एक्स एक्स व्ही) येथे आम्ही आलेखातील प्रत्येक नोडसाठी सर्व नोड्समधून पुढे गेलो आहोत. हे ओ (व्ही * व्ही), बहु-काळातील गुंतागुंत आहे.
  2. स्पेस कॉम्प्लेक्सिटी: ए (एन) = ओ (1), अतिरिक्त जागा वापरली नाही. येथे आम्ही इन-प्लेस टास्क केले, आम्ही सुरुवातीच्या मॅट्रिक्समधील व्हॅल्यूज बदलल्या आहेत. अशा प्रकारे निरंतर जागा घेतली जाते.

व्ही = आलेखातील शिरोबिंदूंची संख्या.

E = आलेखामधील किनारांची संख्या.