Изменения

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

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

313 байт добавлено, 07:42, 17 ноября 2011
Нет описания правки
numOfObject -= (количество комбинаторных обектов с данным префиксом)
'''} else {'''
ans[i]=j
break
'''}'''
== Перестановки ==
Рассмотрим алгоритм получения <tex>i</tex>-ой в [[Лексикографический порядок|лексикографическом порядке]] перестановки размера <tex>n</tex>.
Заметим, что всем префиксом префиксам на каждом шаге будет соответствовать диапазон номеров одинакового размера, (так как количество перестановок не зависит от префикса) то есть можем просто посчитать "количество диапозонов, которые идут до нас" (количество цифр уже полностью занятых перестановками с меньшим номером) за <tex>O(1) </tex>:
*'''n!''' {{---}} количество перестановок размера <tex>n</tex>
== Битовые вектора ==
Для некоторых комбинаторных объектов, например битовых векторов, можно привести явную Рассмотрим алгоритм получения <tex>i</tex>-ого в [[ОтображенияЛексикографический порядок|биекциюлексикографическом порядке]] из множества номеров в множество объектов.В данном случае битовым вектором для номера битового вектора размера <tex>n</tex> .При построение битовых векторов можно не проверять условие о возможности постановки какого-то объекта на текущее место. На каждый позиции может стоять один из двух элементов, независимо от того, какие элементы находятся в префиксе. Так как у нас всего два возможных элемента, упростим второй цикл до условия:  *'''bitvector[n]''' {{---}} будет являться его двоичное представление, которое можно получить гораздо легче,чем генерировать объект общим алгоритмом. Если не учитовать особенности представления натуральных числе в памяти компьютера, то искомый битовый вектор можно получить из числа за  *'''2^n''' {{---}} <tex>O(\log2^{n}) </tex>, где количество битовых векторов длины <tex>n</tex>  '''for''' i = 1 '''to''' n '''do''' '''if''' numOfObject > 2^(n -i) '''{{-''' numOfObject -= 2^(n-i) bitvector[i] = 1 '''}else {''' bitvector[i] = 0 '''} номер вектора ('''Данный алгоритм работает за <tex>\log{O(n})</tex> = длине битового вектора), простым переводом десятичного числа так как в случае битовых векторов <tex>k</tex> не зависит от <tex>n</tex> в двоичную систему счисленияи <tex>k=2</tex>.
== См. также ==
*[[Получение номера по объекту|Получение номера по объекту]]
Анонимный участник

Навигация