Изменения

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

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

252 байта добавлено, 05:38, 18 ноября 2011
Нет описания правки
*'''n''' {{---}} количество мест в комбинаторном объекте (например, битовый вектор длины <tex>n</tex>)
*'''k''' {{---}} количество различных элементов, которые могут находиться в данном комбинаторном объекте. Например, для битового вектора <tex>k=2</tex> : возможны только 0 и 1. Все элементы занумерованы в лексикографическом порядке, начиная с 1.Комбинаторные объекты занумерованы с 0. Переход к нумерации с единицы можно сделать с помощью одной операции декремента перед проходом алгоритма.
'''for''' i = 1 '''to''' n '''do'''
'''for''' j = 1 '''to''' k '''do'''
'''if''' j-ый элемент можно поставить на i-e место '''{'''
'''if''' numOfObject > = (количество комбинаторных обектов с данным префиксом) '''{'''
numOfObject -= (количество комбинаторных обектов с данным префиксом)
'''} else {'''
*'''curFree''' {{---}} если элемент с номером <tex>k</tex> свободен, то он имеет номер '''curFree''' среди всех свободных элементов с 1 по <tex>k</tex>
'''for''' i = 1 '''to''' n '''do''' '''{'''
alreadyWas = (numOfPermutation - 1) div (n-i)! numOfPermutation = ((numOfPermutation - 1) mod (n-i)! ) + 1
curFree = 0
'''for''' k = 1 '''to''' n '''do'''
'''for''' i = 1 '''to''' n '''do'''
'''if''' numOfBitvector > = 2^(n-i) '''{'''
numOfBitvector -= 2^(n-i)
bitvector[i] = 1
Анонимный участник

Навигация