Open In App

Graph representations using set and hash

Last Updated : 08 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

We have introduced Graph implementation using array of vectors in Graph implementation using STL for competitive programming | Set 1. In this post, a different implementation is used which can be used to implement graphs using sets. The implementation is for adjacency list representation of graph.

A set is different from a vector in two ways: it stores elements in a sorted way, and duplicate elements are not allowed. Therefore, this approach cannot be used for graphs containing parallel edges. Since sets are internally implemented as binary search trees, an edge between two vertices can be searched in O(logV) time, where V is the number of vertices in the graph. Sets in python are unordered and not indexed. Hence, for python we will be using dictionary which will have source vertex as key and its adjacency list will be stored in a set format as value for that key.

Following is an example of an undirected and unweighted graph with 5 vertices. 

8

Below is adjacency list representation of this graph using array of sets

9

Below is the code for adjacency list representation of an undirected graph using sets: 

C++




// A C++ program to demonstrate adjacency list
// representation of graphs using sets
#include <bits/stdc++.h>
using namespace std;
 
struct Graph {
    int V;
    set<int>* adjList;
};
 
// A utility function that creates a graph of V vertices
Graph* createGraph(int V)
{
    Graph* graph = new Graph;
    graph->V = V;
 
    // Create an array of sets representing
    // adjacency lists.  Size of the array will be V
    graph->adjList = new set<int >[V];
 
    return graph;
}
 
// Adds an edge to an undirected graph
void addEdge(Graph* graph, int src, int dest)
{
    // Add an edge from src to dest.  A new
    // element is inserted to the adjacent
    // list of src.
    graph->adjList[src].insert(dest);
 
    // Since graph is undirected, add an edge
    // from dest to src also
    graph->adjList[dest].insert(src);
}
 
// A utility function to print the adjacency
// list representation of graph
void printGraph(Graph* graph)
{
    for (int i = 0; i < graph->V; ++i) {
        set<int> lst = graph->adjList[i];
        cout << endl << "Adjacency list of vertex "
             << i << endl;
 
        for (auto itr = lst.begin(); itr != lst.end(); ++itr)
            cout << *itr << " ";
        cout << endl;
    }
}
 
// Searches for a given edge in the graph
void searchEdge(Graph* graph, int src, int dest)
{
    auto itr = graph->adjList[src].find(dest);
    if (itr == graph->adjList[src].end())
        cout << endl << "Edge from " << src
             << " to " << dest << " not found."
             << endl;
    else
        cout << endl << "Edge from " << src
             << " to " << dest << " found."
             << endl;
}
 
// Driver code
int main()
{
    // Create the graph given in the above figure
    int V = 5;
    struct Graph* graph = createGraph(V);
    addEdge(graph, 0, 1);
    addEdge(graph, 0, 4);
    addEdge(graph, 1, 2);
    addEdge(graph, 1, 3);
    addEdge(graph, 1, 4);
    addEdge(graph, 2, 3);
    addEdge(graph, 3, 4);
 
    // Print the adjacency list representation of
    // the above graph
    printGraph(graph);
 
    // Search the given edge in the graph
    searchEdge(graph, 2, 1);
    searchEdge(graph, 0, 3);
 
    return 0;
}


Java




// A Java program to demonstrate adjacency
// list using HashMap and TreeSet
// representation of graphs using sets
import java.util.*;
 
class Graph {
 
    // TreeSet is used to get clear
    // understand of graph.
    HashMap<Integer, TreeSet<Integer> > graph;
    static int v;
 
    // Graph Constructor
    public Graph()
    {
        graph = new HashMap<>();
        for (int i = 0; i < v; i++) {
            graph.put(i, new TreeSet<>());
        }
    }
 
    // Adds an edge to an undirected graph
    public void addEdge(int src, int dest)
    {
 
        // Add an edge from src to dest into the set
        graph.get(src).add(dest);
 
        // Since graph is undirected, add an edge
        // from dest to src into the set
        graph.get(dest).add(src);
    }
 
    // A utility function to print the graph
    public void printGraph()
    {
        for (int i = 0; i < v; i++) {
            System.out.println("Adjacency list of vertex "
                               + i);
            Iterator set = graph.get(i).iterator();
 
            while (set.hasNext())
                System.out.print(set.next() + " ");
 
            System.out.println();
            System.out.println();
        }
    }
 
    // Searches for a given edge in the graph
    public void searchEdge(int src, int dest)
    {
        Iterator set = graph.get(src).iterator();
 
        if (graph.get(src).contains(dest))
            System.out.println("Edge from " + src + " to "
                               + dest + " found");
        else
            System.out.println("Edge from " + src + " to "
                               + dest + " not found");
 
        System.out.println();
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        // Create the graph given in the above figure
        v = 5;
        Graph graph = new Graph();
 
        graph.addEdge(0, 1);
        graph.addEdge(0, 4);
        graph.addEdge(1, 2);
        graph.addEdge(1, 3);
        graph.addEdge(1, 4);
        graph.addEdge(2, 3);
        graph.addEdge(3, 4);
 
        // Print the adjacency list representation of
        // the above graph
        graph.printGraph();
 
        // Search the given edge in the graph
        graph.searchEdge(2, 1);
        graph.searchEdge(0, 3);
    }
}
 
// This code is contributed by rexj8


Python3




# Python3 program to represent adjacency
# list using dictionary
from collections import defaultdict
 
class graph(object):
 
    def __init__(self, v):
         
        self.v = v
        self.graph = defaultdict(set)
 
    # Adds an edge to undirected graph
    def addEdge(self, source, destination):
         
        # Add an edge from source to destination.
        # If source is not present in dict add source to dict
        self.graph.add(destination)
 
        # Add an dge from destination to source.
        # If destination is not present in dict add destination to dict
        self.graph[destination].add(source)
 
    # A utility function to print the adjacency
    # list representation of graph
    def print(self):
         
        for i, adjlist in sorted(self.graph.items()):
            print("Adjacency list of vertex ", i)
            for j in sorted(adjlist, reverse = True):
                    print(j, end = " ")
                         
            print('\n')
             
    # Search for a given edge in graph
    def searchEdge(self,source,destination):
         
        if source in self.graph:
            if destination in self.graph:
                if destination in self.graph:
                    if source in self.graph[destination]:
                        print("Edge from {0} to {1} found.\n".format(source, destination))
                        return
                    else:
                        print("Edge from {0} to {1} not found.\n".format(source, destination))
                        return
                else:
                    print("Edge from {0} to {1} not found.\n".format(source, destination))
                    return
            else:
                print("Destination vertex {} is not present in graph.\n".format(destination))
                return
        else:
            print("Source vertex {} is not present in graph.\n".format(source))
         
# Driver code
if __name__=="__main__":
     
    g = graph(5)
     
    g.addEdge(0, 1)
    g.addEdge(0, 4)
    g.addEdge(1, 2)
    g.addEdge(1, 3)
    g.addEdge(1, 4)
    g.addEdge(2, 3)
    g.addEdge(3, 4)
 
    # Print adjacenecy list
    # representation of graph
    g.print()
 
    # Search the given edge in a graph
    g.searchEdge(2, 1)
    g.searchEdge(0, 3)
 
 
#This code is contributed by Yalavarthi Supriya


C#




// A C# program to demonstrate adjacency
// list using HashMap and TreeSet
// representation of graphs using sets
using System;
using System.Collections.Generic;
 
class Graph {
 
    // TreeSet is used to get clear
    // understand of graph.
    Dictionary<int, HashSet<int>> graph;
    static int v;
 
    // Graph Constructor
    public Graph()
    {
        graph = new Dictionary<int, HashSet<int> >();
        for (int i = 0; i < v; i++) {
            graph.Add(i, new HashSet<int>());
        }
    }
 
    // Adds an edge to an undirected graph
    public void addEdge(int src, int dest)
    {
 
        // Add an edge from src to dest into the set
        graph[src].Add(dest);
 
        // Since graph is undirected, add an edge
        // from dest to src into the set
        graph[dest].Add(src);
    }
 
    // A utility function to print the graph
    public void printGraph()
    {
        for (int i = 0; i < v; i++) {
            Console.WriteLine("Adjacency list of vertex "
                              + i);
            foreach(int set_ in graph[i])
                Console.Write(set_ + " ");
 
            Console.WriteLine();
            Console.WriteLine();
        }
    }
 
    // Searches for a given edge in the graph
    public void searchEdge(int src, int dest)
    {
        // Iterator set = graph.get(src).iterator();
 
        if (graph[src].Contains(dest))
            Console.WriteLine("Edge from " + src + " to "
                              + dest + " found");
        else
            Console.WriteLine("Edge from " + src + " to "
                              + dest + " not found");
 
        Console.WriteLine();
    }
 
    // Driver code
    public static void Main(String[] args)
    {
 
        // Create the graph given in the above figure
        v = 5;
        Graph graph = new Graph();
 
        graph.addEdge(0, 1);
        graph.addEdge(0, 4);
        graph.addEdge(1, 2);
        graph.addEdge(1, 3);
        graph.addEdge(1, 4);
        graph.addEdge(2, 3);
        graph.addEdge(3, 4);
 
        // Print the adjacency list representation of
        // the above graph
        graph.printGraph();
 
        // Search the given edge in the graph
        graph.searchEdge(2, 1);
        graph.searchEdge(0, 3);
    }
}
 
// This code is contributed by Abhijeet Kumar(abhijeet19403)


Javascript




<script>
 
// A Javascript program to demonstrate adjacency list
// representation of graphs using sets
 
class Graph {
    constructor()
    {
        this.V = 0;
        this.adjList = new Set();
    }
};
 
// A utility function that creates a graph of V vertices
function createGraph(V)
{
    var graph = new Graph();
    graph.V = V;
 
    // Create an array of sets representing
    // adjacency lists.  Size of the array will be V
    graph.adjList = Array.from(Array(V), ()=>new Set());
 
    return graph;
}
 
// Adds an edge to an undirected graph
function addEdge(graph, src, dest)
{
    // Add an edge from src to dest.  A new
    // element is inserted to the adjacent
    // list of src.
    graph.adjList[src].add(dest);
 
    // Since graph is undirected, add an edge
    // from dest to src also
    graph.adjList[dest].add(src);
}
 
// A utility function to print the adjacency
// list representation of graph
function printGraph(graph)
{
    for (var i = 0; i < graph.V; ++i) {
        var lst = graph.adjList[i];
        document.write( "<br>" + "Adjacency list of vertex "
             + i + "<br>");
 
        for(var item of [...lst].reverse())
            document.write( item + " ");
        document.write("<br>");
    }
}
 
// Searches for a given edge in the graph
function searchEdge(graph, src, dest)
{
    if (!graph.adjList[src].has(dest))
        document.write( "Edge from " + src
               + " to " + dest + " not found.<br>");
    else
        document.write( "<br> Edge from " + src
             + " to " + dest + " found." + "<br><br>");
}
 
// Driver code
// Create the graph given in the above figure
var V = 5;
var graph = createGraph(V);
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
 
// Print the adjacency list representation of
// the above graph
printGraph(graph);
 
// Search the given edge in the graph
searchEdge(graph, 2, 1);
searchEdge(graph, 0, 3);
 
// This code is contributed by rutvik_56.
</script>


Output

Adjacency list of vertex 0
1 4 

Adjacency list of vertex 1
0 2 3 4 

Adjacency list of vertex 2
1 3 

Adjacency list of vertex 3
1 2 4 

Adjacency list of vertex 4
0 1 3 

Edge from 2 to 1 found.

Edge from 0 to 3 not found.

Pros: Queries like whether there is an edge from vertex u to vertex v can be done in O(log V).
Cons

  • Adding an edge takes O(log V), as opposed to O(1) in vector implementation.
  • Graphs containing parallel edge(s) cannot be implemented through this method.

Space Complexity: O(V+E), where V is the number of vertices and E is the number of edges in the graph. This is because the code uses an adjacency list to store the graph, which takes linear space.

Further Optimization of Edge Search Operation using unordered_set (or hashing): The edge search operation can be further optimized to O(1) using unordered_set which uses hashing internally.

Implementation:

C++




// A C++ program to demonstrate adjacency list
// representation of graphs using sets
#include <bits/stdc++.h>
using namespace std;
 
struct Graph {
    int V;
    unordered_set<int>* adjList;
};
 
// A utility function that creates a graph of
// V vertices
Graph* createGraph(int V)
{
    Graph* graph = new Graph;
    graph->V = V;
 
    // Create an array of sets representing
    // adjacency lists. Size of the array will be V
    graph->adjList = new unordered_set<int>[V];
 
    return graph;
}
 
// Adds an edge to an undirected graph
void addEdge(Graph* graph, int src, int dest)
{
    // Add an edge from src to dest. A new
    // element is inserted to the adjacent
    // list of src.
    graph->adjList[src].insert(dest);
 
    // Since graph is undirected, add an edge
    // from dest to src also
    graph->adjList[dest].insert(src);
}
 
// A utility function to print the adjacency
// list representation of graph
void printGraph(Graph* graph)
{
    for (int i = 0; i < graph->V; ++i) {
        unordered_set<int> lst = graph->adjList[i];
        cout << endl << "Adjacency list of vertex "
             << i << endl;
 
        for (auto itr = lst.begin(); itr != lst.end(); ++itr)
            cout << *itr << " ";
        cout << endl;
    }
}
 
// Searches for a given edge in the graph
void searchEdge(Graph* graph, int src, int dest)
{
    auto itr = graph->adjList[src].find(dest);
    if (itr == graph->adjList[src].end())
        cout << endl << "Edge from " << src
             << " to " << dest << " not found."
             << endl;
    else
        cout << endl << "Edge from " << src
             << " to " << dest << " found."
             << endl;
}
 
// Driver code
int main()
{
    // Create the graph given in the above figure
    int V = 5;
    struct Graph* graph = createGraph(V);
    addEdge(graph, 0, 1);
    addEdge(graph, 0, 4);
    addEdge(graph, 1, 2);
    addEdge(graph, 1, 3);
    addEdge(graph, 1, 4);
    addEdge(graph, 2, 3);
    addEdge(graph, 3, 4);
 
    // Print the adjacency list representation of
    // the above graph
    printGraph(graph);
 
    // Search the given edge in the graph
    searchEdge(graph, 2, 1);
    searchEdge(graph, 0, 3);
 
    return 0;
}


Java




import java.util.HashSet;
import java.util.Set;
 
class Graph {
  int V;
  Set<Integer>[] adjList;
 
  public Graph(int V)
  {
    this.V = V;
    adjList = new HashSet[V];
    for (int i = 0; i < V; i++) {
      adjList[i] = new HashSet<Integer>();
    }
  }
 
  // Adds an edge to an undirected graph
  void addEdge(int src, int dest)
  {
 
    // Add an edge from src to dest. A new
    // element is inserted to the adjacent
    // list of src.
    adjList[src].add(dest);
 
    // Since graph is undirected, add an edge
    // from dest to src also
    adjList[dest].add(src);
  }
 
  // A utility function to print the adjacency
  // list representation of graph
  void printGraph()
  {
    for (int i = 0; i < V; i++) {
      Set<Integer> lst = adjList[i];
      System.out.println("Adjacency list of vertex "
                         + i);
      for (Integer itr : lst) {
        System.out.print(itr + " ");
      }
      System.out.println();
    }
  }
 
  // Searches for a given edge in the graph
  void searchEdge(int src, int dest)
  {
    if (!adjList[src].contains(dest)) {
      System.out.println("Edge from " + src + " to "
                         + dest + " not found.");
    }
    else {
      System.out.println("Edge from " + src + " to "
                         + dest + " found.");
    }
  }
}
 
public class Main {
  public static void main(String[] args)
  {
 
    // Create the graph given in the above figure
    int V = 5;
    Graph graph = new Graph(V);
    graph.addEdge(0, 1);
    graph.addEdge(0, 4);
    graph.addEdge(1, 2);
    graph.addEdge(1, 3);
    graph.addEdge(1, 4);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);
 
    // Print the adjacency list representation of
    // the above graph
    graph.printGraph();
 
    // Search the given edge in the graph
    graph.searchEdge(2, 1);
    graph.searchEdge(0, 3);
  }
}
 
// This code is contributed by divya_p123.


Python3




import collections
 
class Graph:
    def __init__(self, V):
        self.V = V
        self.adjList = [set() for _ in range(V)]
 
    def add_edge(self, src, dest):
        self.adjList[src].add(dest)
        self.adjList[dest].add(src)
 
    def print_graph(self):
        for i in range(self.V):
            print("Adjacency list of vertex {}".format(i))
            for vertex in self.adjList[i]:
                print(vertex, end=' ')
            print()
 
    def search_edge(self, src, dest):
        if dest in self.adjList[src]:
            print("Edge from {} to {} found.".format(src, dest))
        else:
            print("Edge from {} to {} not found.".format(src, dest))
 
 
# Driver code
if __name__ == "__main__":
    V = 5
    graph = Graph(V)
    graph.add_edge(0, 1)
    graph.add_edge(0, 4)
    graph.add_edge(1, 2)
    graph.add_edge(1, 3)
    graph.add_edge(1, 4)
    graph.add_edge(2, 3)
    graph.add_edge(3, 4)
 
    # Print the adjacency list representation of the above graph
    graph.print_graph()
 
    # Search the given edge in the graph
    graph.search_edge(2, 1)
    graph.search_edge(0, 3)


C#




using System;
using System.Collections.Generic;
 
class Graph {
  int V;
  HashSet<int>[] adjList;
 
  public Graph(int V)
  {
    this.V = V;
    adjList = new HashSet<int>[ V ];
    for (int i = 0; i < V; i++) {
      adjList[i] = new HashSet<int>();
    }
  }
 
  // Adds an edge to an undirected graph
  void addEdge(int src, int dest)
  {
 
    // Add an edge from src to dest. A new
    // element is inserted to the adjacent
    // list of src.
    adjList[src].Add(dest);
 
    // Since graph is undirected, add an edge
    // from dest to src also
    adjList[dest].Add(src);
  }
 
  // A utility function to print the adjacency
  // list representation of graph
  void printGraph()
  {
    for (int i = 0; i < V; i++) {
      HashSet<int> lst = adjList[i];
      Console.WriteLine("Adjacency list of vertex "
                        + i);
      foreach(int itr in lst)
      {
        Console.Write(itr + " ");
      }
      Console.WriteLine();
    }
  }
 
  // Searches for a given edge in the graph
  void searchEdge(int src, int dest)
  {
    if (!adjList[src].Contains(dest)) {
      Console.WriteLine("Edge from " + src + " to "
                        + dest + " not found.");
    }
    else {
      Console.WriteLine("Edge from " + src + " to "
                        + dest + " found.");
    }
  }
 
  public static void Main(string[] args)
  {
 
    // Create the graph given in the above figure
    int V = 5;
    Graph graph = new Graph(V);
    graph.addEdge(0, 1);
    graph.addEdge(0, 4);
    graph.addEdge(1, 2);
    graph.addEdge(1, 3);
    graph.addEdge(1, 4);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);
 
    // Print the adjacency list representation of
    // the above graph
    graph.printGraph();
 
    // Search the given edge in the graph
    graph.searchEdge(2, 1);
    graph.searchEdge(0, 3);
  }
}
 
// THIS CODE IS CONTRIBUTED BY YASH
// AGARWAL(YASHAGARWAL2852002)


Javascript




<script>
 
// A JavaScript program to demonstrate adjacency list
// representation of graphs using sets
 
// Struct to represent a graph
class Graph {
  constructor(V) {
    this.V = V;
    this.adjList = new Array(V).fill().map(() => new Set());
  }
}
 
// Adds an edge to an undirected graph
function addEdge(graph, src, dest) {
  // Add an edge from src to dest. A new element is inserted
  // to the adjacent list of src.
  graph.adjList[src].add(dest);
 
  // Since graph is undirected, add an edge from dest to src also
  graph.adjList[dest].add(src);
}
 
// A utility function to print the adjacency list representation of graph
function printGraph(graph) {
  for (let i = 0; i < graph.V; ++i) {
    const lst = graph.adjList[i];
    console.log(`\nAdjacency list of vertex ${i}\n`);
 
    for (const element of lst) {
      console.log(element);
    }
  }
}
 
// Searches for a given edge in the graph
function searchEdge(graph, src, dest) {
  if (graph.adjList[src].has(dest)) {
    console.log(`\nEdge from ${src} to ${dest} found.\n`);
  } else {
    console.log(`\nEdge from ${src} to ${dest} not found.\n`);
  }
}
 
// Test code
 
// Create the graph given in the above figure
const V = 5;
const graph = new Graph(V);
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
 
// Print the adjacency list representation of the above graph
printGraph(graph);
 
// Search the given edge in the graph
searchEdge(graph, 2, 1);
searchEdge(graph, 0, 3);
 
 
</script>


Output

Adjacency list of vertex 0
4 1 

Adjacency list of vertex 1
4 3 2 0 

Adjacency list of vertex 2
3 1 

Adjacency list of vertex 3
4 2 1 

Adjacency list of vertex 4
3 1 0 

Edge from 2 to 1 found.

Edge from 0 to 3 not found.

Time Complexity: The time complexity of creating a graph using adjacency list is O(V + E), where V is the number of vertices and E is the number of edges in the graph.

Space Complexity: The space complexity of creating a graph using adjacency list is O(V + E), where V is the number of vertices and E is the number of edges in the graph.

Pros

  • Queries like whether there is an edge from vertex u to vertex v can be done in O(1).
  • Adding an edge takes O(1).

Cons

  • Graphs containing parallel edge(s) cannot be implemented through this method.
  • Edges are stored in any order.

Note : adjacency matrix representation is the most optimized for edge search, but space requirements of adjacency matrix are comparatively high for big sparse graphs. Moreover adjacency matrix has other disadvantages as well like BFS and DFS become costly as we can’t quickly get all adjacent of a node. 



Similar Reads

What are Hash Functions and How to choose a good Hash Function?
Prerequisite: Hashing | Set 1 (Introduction) What is a Hash Function? A function that converts a given big phone number to a small practical integer value. The mapped integer value is used as an index in the hash table. In simple terms, a hash function maps a big number or string to a small integer that can be used as the index in the hash table. W
5 min read
Hash Functions and Types of Hash functions
Hash functions are a fundamental concept in computer science and play a crucial role in various applications such as data storage, retrieval, and cryptography. In data structures and algorithms (DSA), hash functions are primarily used in hash tables, which are essential for efficient data management. This article delves into the intricacies of hash
4 min read
Graph and its representations
What is Graph Data Structure?A Graph is a non-linear data structure consisting of vertices and edges. The vertices are sometimes also referred to as nodes and the edges are lines or arcs that connect any two nodes in the graph. More formally a Graph is composed of a set of vertices( V ) and a set of edges( E ). The graph is denoted by G(V, E). Repr
3 min read
Sparse Matrix and its representations | Set 1 (Using Arrays and Linked Lists)
A matrix is a two-dimensional data object made of m rows and n columns, therefore having total m x n values. If most of the elements of the matrix have 0 value, then it is called a sparse matrix. Why to use Sparse Matrix instead of simple matrix ? Storage: There are lesser non-zero elements than zeros and thus lesser memory can be used to store onl
15+ min read
Sparse Matrix and its representations | Set 2 (Using List of Lists and Dictionary of keys)
Prerequisite : Sparse Matrix and its representations Set 1 (Using Arrays and Linked Lists)In this post other two methods of sparse matrix representation are discussed. List of ListsDictionary List of Lists (LIL) One of the possible representation of sparse matrix is List of Lists (LIL). Where one list is used to represent the rows and each row cont
15+ min read
Product of count of set bits present in binary representations of elements in an array
Given an array arr[] consisting of N integers, the task is to find the product of the count of set bits in the binary representation of every array element. Examples: Input: arr[] = {3, 2, 4, 1, 5}Output: 4Explanation:Binary representation of the array elements are {3, 2, 4, 1, 5} are {"11", "10", "100", "1", "101"} respectively.Therefore, the prod
6 min read
Sparse Matrix Representations | Set 3 ( CSR )
If most of the elements in the matrix are zero then the matrix is called a sparse matrix. It is wasteful to store the zero elements in the matrix since they do not affect the results of our computation. This is why we implement these matrices in more efficient representations than the standard 2D Array. Using more efficient representations we can c
11 min read
Maximize difference between odd and even indexed array elements by swapping unequal adjacent bits in their binary representations
Given an array arr[] consisting of N positive integers, the task is to find the maximum absolute difference between the sum of the array elements placed at even and odd indices of the array by swapping unequal adjacent bits of in the binary representation of any array element any number of times. Examples: Input: arr[] = {5, 7, 3, 1, 8}Output: 9Exp
12 min read
Maximize difference between odd and even-indexed array elements by rotating their binary representations
Given an array arr[] consisting of N positive integers, the task is to find the maximum absolute difference between the sum of the array elements placed at even indices and those at odd indices of the array by rotating their binary representations any number of times. Consider only 8-bit representation. Examples: Input: arr[] = {123, 86, 234, 189}O
12 min read
XOR of two numbers after making length of their binary representations equal
Given two numbers say a and b. Print their XOR after making the lengths of their binary representation equal by adding trailing zeros to the binary representation of smaller one. Examples : Input : a = 13, b = 5 Output : 7 Explanation : Binary representation of 13 is 1101 and of 5 is 101. As the length of "101" is smaller, so add a '0' to it making
7 min read
Article Tags :
Practice Tags :