Изменения

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

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

62 байта добавлено, 07:03, 17 ноября 2011
Нет описания правки
== Описание алгоритма ==
Получаем элементы объекта по порядку: сначала определим какой элемент будет стоять на первом месте, потом на втором, и так далее. Считаем, что мы нашли первые <tex>i</tex> элементов объекта. Для всех вариантов элемента, который может стоять на позиции с номером <tex>(i+1)</tex>-ой позиции, посчитаем диапазон номеров, который будет соответствовать объектам с данным префиксом. Если искомый номер входит в один из диапазонов, то, очевидно, мы нашли элемент, который должени стоять на месте с номером <tex>(i+1)</tex>-ом месте. Диапазоны номеров не пересекаются, значит, на это место больше нельзя поставить никакой другой элемент, соответственно, это единственный элемент, который может стоять на этой позиции.
*В начале каждого шага '''numOfObject''' {{---}} номер комбинаторного объекта среди объектов с заданным префиксом.
*'''alreadyWas''' {{---}} сколько цифр уже полностью заняты перестановками с меньшим номером
*мы должны поставить ту цифру, которая еще полностью не занята, то есть (цифру с номером '''alreadyWas''' + 1) - уюсреди цифр, которой которых еще нет в нашем префиксе, считаем, что это цифра '''j'''
'''for''' i = 1 '''to''' n '''do''' '''{'''
alreadyWas = (numOfPermutation - 1) div f[n-i]
Анонимный участник

Навигация