2015-01-26 5 views
1

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

for example : 
    2 L,  
    2 S, and 
    1 P 

Я мог бы выстроить их в следующие 16 способов.

llpss 
llsps 
llssp 
lplss 
lpsls 
lslps 
lslsp 
lspls 
lspsl 
lsslp 
lsspl 
pllss 
sllps 
sllsp 
slpls 
slslp 

Перед тем, как возразить, что список является неполным, вы должны знать, что зеркальные изображения считаются эквивалентными.

Например, так как «sspll» - это то же самое, что «llpss» от начала до конца, мы считаем их единственными.

Вам предоставляется int [], содержащая число элементов каждой категории (L, S, P, A, B). Верните int, указав количество способов, которыми они могут быть выровнены, игнорируя отражения.

for example : 
{2, 2, 1} 

Returns: 16   // illustrated above. 

{2, 2, 2} 

Returns: 48 

Что я могу думать о алгоритма очень проста:

  • Преобразование числа в соответствующих алфавитов (L, S, P, A, B, B по индексу 0).
  • Подсчитать общее перестановку возможных с этими алфавитов
  • удалить отражения

    Но это, конечно, не оптимальна solution.Can кто-нибудь сказать мне любое другое решение этой проблемы. Благодаря ..

+0

Что вы имеете в виду «Преобразовать число их соответствующих алфавитов (L, S, P , A, B; B с индексом 0). "? Откуда взялись B и A? –

+0

Это означает, что при вводе {2,2,1} в качестве вклада мы изменим его на 1 B, 2 A и 2 P i.e {PPAAB}.Надеюсь, я ясно дал понять. – Cyclotron3x3

+0

А как насчет L и S? –

ответ

1

Формула для числа слов типа (, б, с) дисконтирование отражений:

[ (a+b+c)!/a!/b!/c! + correction ]/2 

, где коррекции это число слов, отражение которых равно себе.

Например, для (2,2,1) поправочный член равен 2 для двух слов lspsl и. Общее количество слов: (5!/2!/2! + 2)/2 = (120/4 + 2)/2 = 32/2 = 16.

Для (1,1,1) поправочный член равен 0. Поправочный член также равен 0 для (2,1,1). Термин коррекция может быть вычислена непосредственно из числа , б и с (в качестве упражнения.)

+0

Это выглядит хорошо .. но вы можете сказать мне откуда вы получили это уравнение .. – Cyclotron3x3

+0

Для любого слова w множество {w, отражать (w)} состоит из двух элементов, кроме слов, где w = отражает (w), поэтому представьте множество всех слов как объединение куча пар + несколько одиночек. Число синглетонов является поправочным членом. Каждая пара только подсчитывает 1 к ответу; затем сделайте небольшую алгебру. – ErikR

+0

Извините, я действительно не понимаю. Можете ли вы опубликовать некоторые ссылки, с которых вы ссылаетесь. – Cyclotron3x3

Смежные вопросы