Строка возможных комбинаций

Предположим, что это строка из четырех символов, например s = abcd. Рассмотрим только те строки, в которых каждый символ присутствует ровно по одному разу, так что обе строки s=bacd и s=dacb являются допустимыми строками, а s=aabc — нет. Это дает 4! возможные комбинации.

Теперь каждый символ может принимать значение из

a = [0, 1]
b = [0, 1, 2, 3]
c = [0, 1]
d = [0, 1, 2]

Следовательно, я могу получить s=cdab=0112 или s=abcd=0000 или s=abdc=1320 и т. д.

Я хочу вычислить, сколько комбинаций (без повторений) могут принимать строки.

Я написал алгоритм, который проверяет все различные комбинации и отбрасывает дубликаты, но я хотел бы понять, можно ли построить формулу, которая возвращает один и тот же результат (не список всех допустимых комбинаций, а только их количество).

Спасибо


person Flavio    schedule 04.08.2012    source источник


Ответы (1)


Если вы сделаете шаг в сторону, исходя из вашего примера

ваши члены a0,a1,b0,b1,b2,b3 ... d2, что означает, что возможных комбинаций 11!

person Tony Hopkinson    schedule 04.08.2012
comment
Нет, это не факториал 4. - person Flavio; 04.08.2012
comment
Нет, это не 11! либо. Позвольте привести пример. Если у меня есть 3 символа a=[0] b=[0,1] c=[0,1,2] и s=abc, то возможные комбинации для s будут (000,001,002,010,011,012). Для s=acb у вас есть (000,001,010,011,020,021) и так далее. Вы отбрасываете дубликаты и (в этом примере) остается 16 комбинаций (000 001 002 010 011 012 020 021 100 101 102 110 120 200 201 210). Я нашел алгоритм, который работает за O(n!) (в этом примере 3!), но мне было интересно, возможно ли O(n) или O(1). - person Flavio; 05.08.2012
comment
Хорошо, теперь я тебя понимаю. так что 000 может быть abc, bca, cba ... и т. д. Теперь нужно подумать, но должна быть какая-то связь, включающая количество букв и количество значений, которыми может быть представлена ​​каждая буква. Интересно, возможно, вам лучше перенести это в math.overflow - person Tony Hopkinson; 05.08.2012
comment
В вашем примере вы указываете 020 как одну из возможных комбинаций из 16, которые вы придумали. Но я не совсем понимаю, как это может быть комбинацией, поскольку 2 не входит в набор a или b. 2 — последний элемент множества c. Таким образом, если 020 является допустимой комбинацией, это означает, что вы ищете все перестановки набора c, включая повторения любого значения в наборе c. Это правильно? - person Bob Bryan; 26.09.2012