Количество уникальных подмножеств из набора с повторяющимися элементами

Опубликовано: 20 Сентября, 2022

Дан массив arr[] размера N . Задача состоит в том, чтобы подсчитать количество уникальных подмножеств.

Примеры:

Input: arr[] = {1, 2, 2}
Output: 6
Explanation: Total possible subsets of this set  = 2³= 8. 
Following are the all 8 subsets formed from arr[].
{}, {1}, {2}, {2}, {1, 2}, {1, 2}, {2, 2}, {1, 2, 2}. 
These are all possible subsets out of which {2} and {1, 2} are repeated.
Therefore there are only 6 unique subsets of given set.

Input: arr[] = {1, 3, 3, 4, 4, 4}
Output: 24

Наивный подход: в базовом подходе создайте все подмножества набора и сохраните их в std::set, который хранит только уникальные элементы. Но это не эффективный по времени подход.

Временная сложность: O(2 N )
Вспомогательное пространство: O(N * 2 N-1 )

Эффективный подход: можно заметить, что не требуется находить все подмножества. Единственная проблема состоит в том, чтобы найти количество уникальных подмножеств. Основываясь на том, сколько раз каждый элемент вносит свой вклад в уникальные подмножества, это можно сделать с помощью математических манипуляций и, наконец, получить формулу.

Следуйте приведенному ниже наблюдению, чтобы получить формулу.

For each unique value vali say the frequency of that element is freq[vali].
So each unique value has (freq[vali] + 1) to be present in a unique subset
because it can be present 0 times, 1 time, 2 times . . . freq[vali] times in a subset.
Now this is true for all such unique elements.
Therefore, The number of unique subsets of a set  = Product of (frequency+1) of each element.

Ниже приведена реализация описанного выше подхода.


Временная сложность: O(N)
Вспомогательное пространство: НА)

РЕКОМЕНДУЕМЫЕ СТАТЬИ