Comprobar si las representaciones binarias de dos números son anagramas

Dados dos números, debe verificar si son anagramas entre sí o no en representación binaria.
Ejemplos: 

Input : a = 8, b = 4 
Output : Yes
Binary representations of both
numbers have same 0s and 1s.

Input : a = 4, b = 5
Output : No

Enfoque sencillo: 

  1. Encuentre la representación binaria de ‘a’ y ‘b’ usando una técnica simple de representación decimal a binaria.
  2. Comprobar si dos representaciones binarias son un anagrama

A continuación se muestra la implementación del enfoque anterior:

C++

// A simple C++ program to check if binary
// representations of two numbers are anagram.
#include <bits/stdc++.h>
#define ull unsigned long long int
using namespace std;
 
const int SIZE = 8 * sizeof(ull);
 
bool bit_anagram_check(ull a, ull b)
{
    // Find reverse binary representation of a
    // and store it in binary_a[]
    int i = 0, binary_a[SIZE] = { 0 };
    while (a > 0) {
        binary_a[i] = a % 2;
        a /= 2;
        i++;
    }
 
    // Find reverse binary representation of b
    // and store it in binary_a[]
    int j = 0, binary_b[SIZE] = { 0 };
    while (b > 0) {
        binary_b[j] = b % 2;
        b /= 2;
        j++;
    }
 
    // Sort two binary representations
    sort(binary_a, binary_a + SIZE);
    sort(binary_b, binary_b + SIZE);
 
    // Compare two sorted binary representations
    for (int i = 0; i < SIZE; i++)
        if (binary_a[i] != binary_b[i])
            return false;
 
    return true;
}
 
// Driver code
int main()
{
    ull a = 8, b = 4;
    cout << bit_anagram_check(a, b) << endl;
    return 0;
}

Java

// A simple Java program to check if binary
// representations of two numbers are anagram
import java.io.*;
import java.util.*;
 
class GFG
{
    public static int SIZE = 8;
     
    // Function to check if binary representation
    // of two numbers are anagram
    static int bit_anagram_check(long a, long b)
    {
        // Find reverse binary representation of a
        // and store it in binary_a[]
        int i = 0;
        long[] binary_a = new long[SIZE];
        Arrays.fill(binary_a, 0);
        while (a > 0)
        {
            binary_a[i] = a%2;
            a /= 2;
            i++;
        }
  
        // Find reverse binary representation of b
        // and store it in binary_a[]
        int j = 0;
        long[] binary_b = new long[SIZE];
        Arrays.fill(binary_b, 0);
        while (b > 0)
        {
            binary_b[j] = b%2;
            b /= 2;
            j++;
        }
  
        // Sort two binary representations
        Arrays.sort(binary_a);
        Arrays.sort(binary_b);
  
        // Compare two sorted binary representations
        for (i = 0; i < SIZE; i++)
            if (binary_a[i] != binary_b[i])
                return 0;
  
        return 1;
    }
 
    // driver program
    public static void main (String[] args)
    {
        long a = 8, b = 4;
        System.out.println(bit_anagram_check(a, b));
    }
}
 
// Contributed by Pramod Kumar

Python3

# A simple Python program to check if binary
# representations of two numbers are anagram.
SIZE = 8
def bit_anagram_check(a, b):
 
    # Find reverse binary representation of a
    # and store it in binary_a[]
    global size
 
    i = 0
    binary_a = [0] * SIZE
    while (a > 0):
        binary_a[i] = a % 2
        a //= 2
        i += 1
 
    # Find reverse binary representation of b
    # and store it in binary_a[]
    j = 0
    binary_b = [0] * SIZE
    while (b > 0):
        binary_b[j] = b % 2
        b //= 2
        j += 1
 
    # Sort two binary representations
    binary_a.sort()
    binary_b.sort()
 
    # Compare two sorted binary representations
    for i in range(SIZE):
        if (binary_a[i] != binary_b[i]):
            return 0
    return 1
 
# Driver code
if __name__ == "__main__":
 
    a = 8
    b = 4
    print(bit_anagram_check(a, b))
 
    # This code is contributed by ukasp.

C#

// A simple C# program to check if
// binary representations of two
// numbers are anagram
using System;
 
class GFG
{
public static int SIZE = 8;
 
// Function to check if binary
// representation of two numbers
// are anagram
public static int bit_anagram_check(long a,
                                    long b)
{
    // Find reverse binary representation
    // of a and store it in binary_a[]
    int i = 0;
    long[] binary_a = new long[SIZE];
    Arrays.Fill(binary_a, 0);
    while (a > 0)
    {
        binary_a[i] = a % 2;
        a /= 2;
        i++;
    }
 
    // Find reverse binary representation 
    // of b and store it in binary_a[]
    int j = 0;
    long[] binary_b = new long[SIZE];
    Arrays.Fill(binary_b, 0);
    while (b > 0)
    {
        binary_b[j] = b % 2;
        b /= 2;
        j++;
    }
 
    // Sort two binary representations
    Array.Sort(binary_a);
    Array.Sort(binary_b);
 
    // Compare two sorted binary
    // representations
    for (i = 0; i < SIZE; i++)
    {
        if (binary_a[i] != binary_b[i])
        {
            return 0;
        }
    }
 
    return 1;
}
 
public static class Arrays
{
public static T[] CopyOf<T>(T[] original,
                            int newLength)
{
    T[] dest = new T[newLength];
    System.Array.Copy(original, dest, newLength);
    return dest;
}
 
public static T[] CopyOfRange<T>(T[] original,
                                 int fromIndex,
                                 int toIndex)
{
    int length = toIndex - fromIndex;
    T[] dest = new T[length];
    System.Array.Copy(original, fromIndex,
                         dest, 0, length);
    return dest;
}
 
public static void Fill<T>(T[] array, T value)
{
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = value;
    }
}
 
public static void Fill<T>(T[] array, int fromIndex,
                           int toIndex, T value)
{
    for (int i = fromIndex; i < toIndex; i++)
    {
        array[i] = value;
    }
}
}
 
 
// Driver Code
public static void Main(string[] args)
{
    long a = 8, b = 4;
    Console.WriteLine(bit_anagram_check(a, b));
}
}
 
// This code is contributed by Shrikant13

Javascript

<script>
// A simple Javascript program to check if binary
// representations of two numbers are anagram
     
    let SIZE = 8;
     
    // Function to check if binary representation
    // of two numbers are anagram
    function bit_anagram_check(a,b)
    {
        // Find reverse binary representation of a
        // and store it in binary_a[]
        let i = 0;
        let binary_a = new Array(SIZE);
        for(let i=0;i<SIZE;i++)
        {
            binary_a[i]=0;
        }
        while (a > 0)
        {
            binary_a[i] = a%2;
            a = Math.floor(a/2);
            i++;
        }
   
        // Find reverse binary representation of b
        // and store it in binary_a[]
        let j = 0;
        let binary_b = new Array(SIZE);
        for(let i=0;i<SIZE;i++)
        {
            binary_b[i]=0;
        }
        while (b > 0)
        {
            binary_b[j] = b%2;
            b = Math.floor(b/2);
            j++;
        }
   
        // Sort two binary representations
        binary_a.sort(function(a,b){return a-b;});
        binary_b.sort(function(a,b){return a-b;});
   
        // Compare two sorted binary representations
        for (i = 0; i < SIZE; i++)
            if (binary_a[i] != binary_b[i])
                return 0;
   
        return 1;
    }
     
    // driver program
    let a = 8, b = 4;
    document.write(bit_anagram_check(a, b));
     
    //This code is contributed by rag2127
     
</script>
Producción

1

Tenga en cuenta que el código anterior utiliza funciones específicas de GCC. Si deseamos escribir código para otros compiladores, podemos usar Count set bits en un entero .
Complejidad de tiempo: O (1) 
Espacio auxiliar: O (1) No se utiliza espacio adicional.

Otro enfoque : si el número de bits establecidos en dos números es igual, entonces sus representaciones binarias son anagramas.
A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program to check if binary
// representations of two numbers are anagrams.
#include <bits/stdc++.h>
 
using namespace std;
 
// Check each bit in a number is set or not
// and return the total count of the set bits.
int countSetBits(int n)
{
    int count = 0;
    while (n) {
        count += n & 1;
        n >>= 1;
    }
    return count;
}
 
bool areAnagrams(int A, int B)
{
    return countSetBits(A) == countSetBits(B);
}
 
// Driver code
int main()
{
    int a = 8, b = 4;
    cout << areAnagrams(a, b) << endl;
    return 0;
}
 
// This code is contributed by phasing17

Java

// Java program to check if binary
// representations of two numbers are anagrams.
 
import java.util.*;
 
class GFG {
 
    // Check each bit in a number is set or not
    // and return the total count of the set bits.
    public static int countSetBits(int n)
    {
        int count = 0;
        while (n != 0) {
            count += n & 1;
            n >>= 1;
        }
        return count;
    }
 
    public static boolean areAnagrams(int A, int B)
    {
        return countSetBits(A) == countSetBits(B);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int a = 8;
        int b = 4;
        System.out.println(areAnagrams(a, b));
    }
}
 
// This code is contributed by phasing17

Python3

# Python3 program to check if binary
# representations of two numbers are anagrams.
   
# Check each bit in a number is set or not
# and return the total count of the set bits.
def countSetBits(n) :
     
    count = 0
    while n>0 :
        count += n & 1
        n >>= 1
    return count
 
def areAnagrams(A, B) :
    return countSetBits(A) == countSetBits(B)
     
# Driver code
if __name__ == "__main__" :
     
    a,b = 8,4
    if areAnagrams(a, b) :
        print("1")
    else :
        print("0")
 
# this code is contributed by aditya942003patil

C#

// C# program to check if binary
// representations of two numbers are anagrams.
using System;
 
public static class GFG {
 
  // Check each bit in a number is set or not
  // and return the total count of the set bits.
  public static int countSetBits(int n)
  {
    int count = 0;
    while (n != 0) {
      count += n & 1;
      n >>= 1;
    }
    return count;
  }
 
  public static bool areAnagrams(int A, int B)
  {
    return countSetBits(A) == countSetBits(B);
  }
 
  // Driver code
  public static void Main()
  {
    int a = 8;
    int b = 4;
    Console.Write(areAnagrams(a, b));
    Console.Write("\n");
  }
}
 
// This code is contributed by Aarti_Rathi
Producción

1

Tiempo Complejidad : O (1) 
Espacio Auxiliar : O (1) 

Este artículo es una contribución de Aarti_Rathi y Aditya Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *