Можно ли получить k-й элемент комбинации длины m символов в O (1)?

Вы знаете какой-либо способ получить k-й элемент комбинации m-элементов в O (1)? Ожидаемое решение должно работать для любого размера входных данных и любого значения m.

Позвольте мне объяснить эту проблему на примере (код на Python):

>>> import itertools
>>> data = ['a', 'b', 'c', 'd']
>>> k = 2
>>> m = 3
>>> result = [''.join(el) for el in itertools.combinations(data, m)]
>>> print result
['abc', 'abd', 'acd', 'bcd']
>>> print result[k-1]
abd

Для заданных данных k-й (2-й в этом примере) элемент комбинации m элементов - это abd . Возможно ли это значение (abd) без создания всего комбинаторного списка?

Я спрашиваю, потому что у меня есть данные из ~ 1 000 000 символов, и невозможно создать полный комбинаторный список длиной m символов, чтобы получить k-й element.

Решением может быть псевдокод или ссылка на страницу, описывающую эту проблему (к сожалению, я не нашел ее).

Спасибо!

6
задан James Sumners 15 May 2011 в 20:14
поделиться