Генерация уникальных комбинаций из списка возможных повторяющихся символов - PullRequest
2 голосов
/ 05 октября 2010

Я ищу для создания комбинаций из списка элементов. Прямо сейчас я использую подход генерирования мощности. Например, чтобы сгенерировать комбинации из {a, b, c}, я перечислю 001,010,100, 101 и т. Д. И возьму элемент, для которого соответствующий двоичный индекс равен 1. Но проблема возникает, когда в списке есть повторяющиеся символы Say {a, a, b}. вышеупомянутый подход даст a, a, b, ab, ba, aab. где, как я хотел бы видеть только a, b, ab, aa, aab.

Я думал написать какую-нибудь двоичную маску для устранения повторяющихся строк, но это не удалось. Есть мысли о том, как генерировать уникальные комбинации?

1 Ответ

1 голос
/ 05 октября 2010

Вместо генерации битовых векторов вы можете генерировать векторы из натуральных чисел длиной, равной количеству отдельных элементов, с учетом ограничения, что каждый компонент может варьироваться от 0 до кратности соответствующего элемента.В приведенном выше примере есть два различных элемента (a и b) с многовариантностью 2 и 1 соответственно.Следовательно, вы получите

a b
-------
0 1 --> b
1 0 --> a
1 1 --> ab
2 0 --> aa
2 1 --> aab
...