Вычисление перестановки с повторениями лексиграфического

У меня вопрос по комбинаторике, а именно по перестановкам и лексикону. Раньше я вычислял перестановку множества с заданным лексиграфическим индексом, но это были перестановки без повторений.

Теперь я хотел бы рассчитать перестановку заданного лексиграфического индекса с повторениями. Моя проблема в том, что я не знаю, как подойти к лексиграфической индексации перестановок с повторением.

Предположим, у меня есть следующий набор элементов" {A,B,C,D,E,F,G,H}

Я хотел бы рассчитать перестановку 20 из этих элементов с лексиграфическим индексом n; n является 64-битным числом. Как определить лексиграфическую индексацию? Могу ли я по-прежнему использовать метод факторной базы?


person recursion.ninja    schedule 28.01.2013    source источник


Ответы (2)


Предположим, у вас есть 8 элементов (как в вашем примере), что означает, что вам нужно 3 бита для индекса. Чтобы определить перестановку длиной 20, вам нужно 3*20=60 бит.

Таким образом, целочисленные значения v из [0,2^60) будут определять все перестановки с повторениями, где v & 7 будет индексом первого элемента в перестановке, (v & (7 << 3) >> 3) - индексом второго элемента и так далее...

person Elalfer    schedule 28.01.2013

размер вашего набора равен 8, а длина — 20, так что всего r 8^20 перестановок. если вы хотите вычислить n-ю перестановку, вы можете просто определить побитно. то есть 1-й бит равен «A», если n меньше 7 ^ 20, «B», если n находится в диапазоне [7 ^ 20, 2 * 7 ^ 20) и т. д.

person songlj    schedule 28.01.2013