【发布时间】:2017-09-03 13:34:02
【问题描述】:
有一组元素,在本例中是一个由 3 个字符/元素 {A、B、C} 组成的数组:
char[] charSet = "ABC".ToCharArray();
我想编写一个通用的使用函数来帮助确定哪些是可以生成的指定长度的组合总数,并确定有和没有重复的可能组合的数量。为了避免可能的错误:这个问题不是关于组合/烫发的生成,只是计算。
一个简单的未完成的例子来理解我:
public static long CalculateCombinations(int setLength, int comboLength, bool allowRepetition)
{
return result;
}
( 其中setLength 是集合中元素的数量,comboLength 是每个组合的所需长度,allowRepetition 是一个确定性标志,用于帮助计算何时以及何时不允许元素重复的组合数量在每个组合中。)
然后,如果我有上面指定的相同字符集,并且我想计算重复的可能组合的数量,算法应该返回一个值 9,这将是这一系列组合的等效数量:
1: AA
2: AB
3: AC
4: BA
5: BB
6: BC
7: CA
8: CB
9: CC
如果我不想重复,相同的算法应该返回一个值 6,这将是这一系列组合的等效数量:
1: AB
2: AC
3: BA
4: BC
5: CA
6: CB
基本上,我正在尝试重现此在线服务可以做什么:http://textmechanic.com/text-tools/combination-permutation-tools/combination-generator/ 但是我尝试在 WWW 周围调查和实施不同的“nCr”公式(如 http://www.vcskicks.com/code-snippet/combination.php )和 StackOverflow线程(如https://stackoverflow.com/a/26312275/1248295),但是当计算中涉及组合长度因子和重复时,我不知道如何计算它。也许这可能比我认为的太基础,但数学不是我的强项。
我的问题:我怎样才能编写一个算法来计算我解释的内容?如果有人可以链接公式及其在 C# 或 VB.NET 中的实现,将不胜感激。
【问题讨论】:
-
正如@Lazar Ljubenović 在他的回答中提到的,这些被称为排列。可以在here 找到非重复版本的一个很好的例子。
-
@Aly El-Haddad 感谢您的评论,但正如我在问题中澄清的那样:“这个问题不是关于组合/排列生成,它只是关于计算。” (即,计算要生成的组合数量的函数。执行此操作所需的公式。)
-
现在我无法分享回答我自己问题的解决方案,因为一位“版主”决定将我的问题标记为(误报)重复。非常适合 StackOverflow 免费审核概念......每个人都可以无正当理由骚扰他人或误解或仅仅因为不阅读问题可能会给 OP 带来其他问题。
标签: c# .net vb.net math combinations