Java Program to Find the Largest Independent Set in a Graph by Complements


Here's a Java programme executed in C to discover the biggest autonomous set in a chart utilising the complement chart approach. The programme, to begin with, builds the complement chart of the given input chart. At that point, it emphasises each vertex within the complement chart and recursively finds the greatest free set (MIS) by counting or barring the current vertex. The programme keeps track of the estimate of the most extreme free set found so far and returns it as the ultimate result. By utilising the complement chart, we are ready to change the issue of finding the biggest autonomous set into finding the greatest clique within the unique chart, which permits for a proficient arrangement.

Methods Used

  • Brute force approach

Brute Force Approach

The brute-force approach for finding the biggest autonomous set in a chart includes producing all conceivable subsets of vertices within the chart and checking in the event that each subset forms a free set. Within the Java programme actualized in C, the calculation repeats through all possible subsets and confirms on the off chance that each vertex within the subset has no adjoining vertices inside the same subset. By comprehensively investigating all subsets, the programme distinguishes the biggest free set with the most extreme number of vertices that satisfy this condition. Be that as it may, due to its exponential time complexity, this approach isn't proficient for expansive charts but is fundamentally reasonable for smaller chart occurrences.

Algorithm

  • Initialise a variable maxSetSize to 0, which is able to store the appraise of the biggest autonomous set found.

  • Generate all possible subsets of vertices within the chart. This may be done by employing a bit masking procedure or by recursively emphasising through all conceivable combinations of vertices.

  • For each subset:

  • Check in the event that the subset shapes an autonomous set. Iterate through each vertex inside the subset.

  • For each vertex v inside the subset, check if there's an adjacent vertex u too inside the subset. In the event that such an adjoining vertex is found, break the circle, as the subset isn't independent.

  • In the event that no adjoining vertices are found for any vertex inside the subset, overhaul maxSetSize in the event that the current subset measure is greater than maxSetSize.

  • The value of maxSetSize will speak to the estimate of the biggest autonomous set found.

  • Optionally, in case the genuine set of vertices within the biggest free set is required, keep track of the vertices compared to the subset with the most extreme size.

  • Return maxSetSize as the measure of the biggest autonomous set.On the off chance that the genuine set of vertices is taken after, return both the degree and the comparing set of vertices.

Example

#include <iostream>
#include <vector>

using namespace std;

bool hasAdjacentVertices(int v, vector<int>& subset, vector<vector<int>>& graph) {
   // Check if vertex v has any adjacent vertices within the subset
   for (int u : subset) {
      if (graph[v][u] == 1)
      return true;
   }
   return false;
}

int findLargestIndependentSet(vector<vector<int>>& graph) {
   int numVertices = graph.size();
   int maxSetSize = 0;

   // Generate all possible subsets of vertices
   for (int i = 0; i < (1 << numVertices); i++) {
      vector<int> subset;
      // Construct the current subset based on the bitmask
      for (int j = 0; j < numVertices; j++) {
         if (i & (1 << j))
         subset.push_back(j);
      }

      bool isIndependent = true;
      // Check if the subset forms an independent set
      for (int v : subset) {
         if (hasAdjacentVertices(v, subset, graph)) {
            // If an adjacent vertex exists within the subset, it is not an independent set
            isIndependent = false;
            break;
         }
      }

      if (isIndependent && subset.size() > maxSetSize)
         maxSetSize = subset.size();
   }

   return maxSetSize;
}

int main() {
   // Example adjacency matrix for a graph with 4 vertices
   vector<vector<int>> graph = {
      {0, 1, 1, 1},
      {1, 0, 1, 0},
      {1, 1, 0, 1},
      {1, 0, 1, 0}
   };

   int largestIndependentSetSize = findLargestIndependentSet(graph);
   cout << "The size of the largest independent set is: " << largestIndependentSetSize << endl;

   return 0;
}

Output

The size of the largest independent set is: 2

Conclusion

This article presents a Java programme actualized in C to discover the biggest free set in a chart, utilising the approach: the brute drive approach. The brute-force approach includes producing all conceivable subsets of vertices and checking to see if each subset shapes a free set.The calculations and their implementations are clarified, along with the illustration code and yields. These approaches give distinctive procedures for understanding the issue of finding the biggest free set in a chart.

Updated on: 31-Jul-2023

44 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements