Изменения

Перейти к: навигация, поиск

Получение объекта по номеру

29 байт убрано, 02:09, 16 ноября 2011
Нет описания правки
Получаем элементы объекта по порядку: сначала определим какой элемент будет стоять на первом месте, потом на втором, и так далее. Считаем, что мы нашли первые <tex>i</tex> элементов объекта. Для всех вариантов элемента, который может стоять на <tex>(i+1)</tex>-ой позиции, посчитаем диапазон номеров, который будет соответствовать объектам с данным префиксом. Если искомый номер входит в один из диапазонов, то, очевидно, мы нашли элемент, который должени стоять на <tex>(i+1)</tex>-ом месте. Диапазоны номеров не пересекаются, значит, на это место больше нельзя поставить никакой другой элемент, соответственно, это единственный элемент, который может стоять на этой позиции.
*В начале каждого шага <tex>'''numOfObject</tex> ''' {{---}} номер комбинаторного объекта среди объектов с заданным префиксом.
*<tex>'''n</tex> ''' {{---}} количество мест в комбинаторном объекте (например, битовый вектор длины <tex>n</tex>)
*<tex>'''k</tex> ''' {{---}} количество различных элементов, которые могут находиться в данном комбинаторном объекте. Например , для битового вектора <tex>k=2</tex> : возможны только 0 и 1. Все элементы занумерованы в лексикографическом порядке, начиная с 1.
'''for''' i = 1 '''to''' n '''do'''
'''for''' j = 1 '''to''' k '''do'''
*<tex>P_{n} </tex> {{---}} количество перестановок размера <tex>n</tex>
*<tex>'''permutation[n]</tex> ''' {{---}} искомая перестановка
*<tex>'''was[n]</tex> ''' {{---}} использовали ли мы уже эту цифру в перестановке
На <tex>i</tex>-ом шаге:
*<tex>'''alreadyWas</tex> ''' {{---}} сколько цифр уже полностью заняты перестановками с меньшим номером
*мы должны поставить ту цифру, которая еще полностью не занята, то есть <tex>alreadyWas+1</tex> - ую, которой еще нет в нашем префиксе, считаем, что это цифра <tex>j</tex>
Анонимный участник

Навигация