Как рассчитать общее количество всех возможных уникальных подмножеств из набора с повторениями? - PullRequest
6 голосов
/ 10 апреля 2009

Учитывая набор ** S, содержащий повторяющиеся элементы, как можно определить общее количество всех возможных подмножеств S, где каждое подмножество уникально.

Например, скажем S = {A, B, B} и пусть K будет множеством всех подмножеств, тогда K = {{}, {A}, {B}, {A, B}, {B, B}, {A, B, B}} и, следовательно, | K | = 6.

Другой пример: S = {A, A, B, B}, тогда K = {{}, {A}, {B}, {A, B}, {A, A}, {B, B}, {A, B, B}, {A, A, B}, {A, A, B, B}} и для этого | K | = 9

Легко видеть, что если S - реальное множество, имеющее только уникальные элементы, то | K | = 2 ^ | S |.

Что такое формула для расчета этого значения | K | заданный «набор» S (с дубликатами), без генерации всех подмножеств?

** Не технически набор.

Ответы [ 2 ]

10 голосов
/ 10 апреля 2009

Возьмите произведение всех (частот + 1).

Например, в {A, B, B} ответом является (1 + 1) [число As] * (2 + 1) [число Bs] = 6.

Во втором примере count (A) = 2 и count (B) = 2. Таким образом, ответ (2 + 1) * (2 + 1) = 9.

Причина, по которой это работает, заключается в том, что вы можете определить любое подмножество как вектор отсчетов - для {A, B, B} подмножества могут быть описаны как {A = 0, B = 0}, {A = 0, B = 1}, {0,2}, {1,0}, {1,1}, {1,2}.

Для каждого числа в счетчиках [] есть (частоты этого объекта + 1) возможные значения. (0..frequencies)

Следовательно, общее число возможностей является произведением всех (частоты + 1).

Случай «все уникально» также может быть объяснен следующим образом - каждый объект встречается по одному случаю, поэтому ответ (1 + 1) ^ | S | = 2 ^ | S |.

1 голос
/ 10 апреля 2009

Я утверждаю, что эту проблему легко решить, если ее правильно рассмотреть. Вам не важен порядок элементов, только если они появляются в подмножестве not.

Подсчитайте, сколько раз каждый элемент появляется в наборе. Для одного набора элементов {A} сколько существует подмножеств? Очевидно, есть только два набора. Теперь предположим, что мы добавили еще один элемент B, отличный от A, для формирования множества {A, B}. Мы можем сформировать список всех наборов очень легко. Возьмите все наборы, которые мы сформировали, используя только A, и добавьте ноль или одну копию B. Фактически мы удваиваем количество наборов. Ясно, что мы можем использовать индукцию, чтобы показать, что для N различных элементов общее число наборов составляет всего 2 ^ N.

Предположим, что некоторые элементы появляются несколько раз? Рассмотрим множество с тремя копиями A. Таким образом, {A, A, A}. Сколько подмножеств вы можете сформировать? Опять же, это просто. У нас может быть 0, 1, 2 или 3 копии A, поэтому общее количество подмножеств равно 4, так как порядок не имеет значения.

Как правило, для N копий элемента A мы получим N + 1 возможных подмножеств. Теперь расширьте это, добавив некоторое количество M копий B. Итак, у нас есть N копий A и M копий B. Сколько всего подмножеств? Да, это тоже очевидно. К каждому возможному подмножеству, содержащему только A (их было N + 1), мы можем добавить от 0 до M копий B.

Таким образом, общее количество подмножеств, когда у нас есть N копий A и M копий B, просто. Это должно быть (N + 1) * (M + 1). Снова, мы можем использовать индуктивный аргумент, чтобы показать, что общее количество подмножеств является произведением таких терминов. Просто подсчитайте общее количество повторов для каждого отдельного элемента, добавьте 1 и возьмите произведение.

Посмотрите, что происходит с множеством {A, B, B}. Мы получаем 2 * 3 = 6.

Для множества {A, A, B, B} получаем 3 * 3 = 9.

...