Рубрики

Нахождение всех подмножеств данного набора в Java

Проблема: Найти все подмножества данного набора.

Input: 
S = {a, b, c, d}
Output:
{}, {a} , {b}, {c}, {d}, {a,b}, {a,c},
{a,d}, {b,c}, {b,d}, {c,d}, {a,b,c}, 
{a,b,d}, {a,c,d}, {b,c,d}, {a,b,c,d}

Общее количество подмножеств любого данного набора равно 2 ^ (количество элементов в наборе). Если мы тщательно заметим, это не что иное, как двоичные числа от 0 до 15, которые могут быть показаны, как показано ниже:

0000{}
0001{a}
0010{b}
0011{a, b}
0100{c}
0101{a, c}
0110{b, c}
0111{a, b, c}
1000{d}
1001{a, d}
1010{b, d}
1011{a, b, d}
1100{c, d}
1101{a, c, d}
1110{b, c, d}
1111{a, b, c, d}

Начиная справа, 1 в i-й позиции показывает, что i-й элемент набора присутствует, а 0 показывает, что элемент отсутствует. Поэтому нам нужно просто сгенерировать двоичные числа от 0 до 2 ^ n — 1, где n — длина набора или количество элементов в наборе.

// Java-программа для печати всех подмножеств набора

import java.io.IOException;

  

class Main

{

    // Распечатать все подмножества данного набора []

    static void printSubsets(char set[])

    {

        int n = set.length;

  

        // Запускаем цикл для печати всех 2 ^ n

        // подмножества по одному

        for (int i = 0; i < (1<<n); i++)

        {

            System.out.print("{ ");

  

            // Распечатать текущее подмножество

            for (int j = 0; j < n; j++)

  

                // (1 << j) это число с j-м битом 1

                // поэтому, когда мы "и" их с

                // номер подмножества, какие числа мы получаем

                // присутствуют в подмножестве и которые

                // не

                if ((i & (1 << j)) > 0)

                    System.out.print(set[j] + " ");

  

            System.out.println("}");

        }

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        char set[] = {'a', 'b', 'c'};

        printSubsets(set);

    }

}

Выход:

{ }
{ a }
{ b }
{ a b }
{ c }
{ a c }
{ b c }
{ a b c }

Похожие сообщения:
Нахождение всех подмножеств множества в C / C ++

Эта статья предоставлена Nikhil Tekwani. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Нахождение всех подмножеств данного набора в Java

0.00 (0%) 0 votes