【发布时间】:2011-08-26 00:54:39
【问题描述】:
你知道在 O(1) 中获得 m 元素组合的第 k 个元素的方法吗?预期的解决方案应该适用于任何大小的输入数据和任何 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
对于给定的 data,m 元素组合的第 k 个(本例中为第 2 个)元素是 abd。是否可以在不创建整个组合列表的情况下获得该值 (abd)?
我问是因为我有大约 1,000,000 个字符的数据,并且不可能创建完整的 m 字符长度组合列表来获取第 k 个元素。
解决方案可以是伪代码,也可以是描述此问题的页面链接(很遗憾,我没有找到)。
谢谢!
【问题讨论】:
-
为此,您需要明确定义的组合顺序。
标签: java python c combinations combinatorics