Изменения

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

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

22 байта добавлено, 23:11, 11 декабря 2011
Описание алгоритма
*'''numOfObject''' {{---}} искомый номер комбинаторного объекта.
*'''a[1..n]''' {{---}} данный комбинаторный обьект.
*'''d[i][j] - (количество комбинаторных объектов с префиксом от 1 до i-1 равным данному и с i-м элементом равным j)
numOfObject = 0
'''for''' i = 1 '''to''' n '''do''' ''// перебираем элементы комбинаторного объекта''
'''for''' j = 1 '''to''' a[i] - 1 '''do''' ''// перебираем элементы которые в лексикографическом порядке меньше рассматриваемого''
'''if''' элемент j можно поставить на i-e место
'''then''' numOfObject += (количество комбинаторных объектов с префиксом от 1 до d[i-1 равным данному и с i-м элементом равным ][j)]
Сложность алгоритма {{---}} <tex>O(nk) </tex>. Здесь <tex>k</tex> - количество различных элементов, которые могут находиться в данном комбинаторном объекте. Для битового вектора <tex>k=2</tex>: возможны только 0 и 1. Количества комбинаторных объектов с заданными префиксами считаются известными, и их подсчет в сложности не учитывается.
Приведем примеры способов получения номеров некоторых из комбинаторных объектов по данному объекту.
Анонимный участник

Навигация