我知道如何计算有替换情况下从n个不同物体中取k个物体的所有组合数:
(n+k-1)!/k!/(n-1)!
我需要的是一个公式或算法,可以从有序列表中恢复第i个这样的组合。
假设我有一个由a、b、c三个元素中取3个元素得到的所有组合的有序列表(因此n=3且k=3):
1 aaa 2 aab 3 aac 4 abb 5 abc 6 acc 7 bbb 8 bbc 9 bcc 10 ccc
在不列举所有组合的情况下,我该如何计算这个列表中的第i个组合(如第7个)?如果我只对一些特定的组合感兴趣,那么枚举将非常低效。例如,有64个项目,每次取6个项目,有119,877,472种组合方式。
不用说,我需要一个适用于任意n、k和i的解决方案。反向函数(给定组合,如何计算其索引)也很有趣。
我找到了一个类似的问题,但它是关于排列而不是组合的: I want to get a specific combination of permutation? 还有许多列出所有组合的方法,例如这里提到的: How to generate all permutations and combinations with/without replacement for distinct items and non distinct items (multisets) 但它们没有给出我需要的函数。
(n+k-1)!/k!/(n-1)!
我需要的是一个公式或算法,可以从有序列表中恢复第i个这样的组合。
假设我有一个由a、b、c三个元素中取3个元素得到的所有组合的有序列表(因此n=3且k=3):
1 aaa 2 aab 3 aac 4 abb 5 abc 6 acc 7 bbb 8 bbc 9 bcc 10 ccc
在不列举所有组合的情况下,我该如何计算这个列表中的第i个组合(如第7个)?如果我只对一些特定的组合感兴趣,那么枚举将非常低效。例如,有64个项目,每次取6个项目,有119,877,472种组合方式。
不用说,我需要一个适用于任意n、k和i的解决方案。反向函数(给定组合,如何计算其索引)也很有趣。
我找到了一个类似的问题,但它是关于排列而不是组合的: I want to get a specific combination of permutation? 还有许多列出所有组合的方法,例如这里提到的: How to generate all permutations and combinations with/without replacement for distinct items and non distinct items (multisets) 但它们没有给出我需要的函数。