考虑到一个数字大于另一个数字,2个数字的可能结果数量

时间:2010-01-17 04:02:51

标签: algorithm permutation combinatorics combinations

我正在尝试编写一种算法来计算结果。但我需要有关组合学的帮助。

假设我必须从1到10中选择2个数字。 根据计算的基本规则,在没有任何限制的情况下,可能结果的数量为10 * 10 = 100.(选择第一个数字时可能有10个结果,选择第二个数字可能有10个结果)。

鉴于第一个数字必须大于第二个数字,可能的结果数是多少?

4 个答案:

答案 0 :(得分:11)

45

想象一下你的10x10对网格。存在从1,1到10,10的对角线,其中A = B,因此那些不是A> B.该线将其他情况分成两半:一个具有A> B,一个具有B< A.这些分区中的每一个都是相同的大小。剩下90个值(对角线10个值),因此有45对,其中A> 1。乙

答案 1 :(得分:6)

如果您选择:

  • 1:2到10 = 9种可能性
  • 2:3到10 = 8种可能性
  • ...
  • 9:10 = 1可能性

所以

9 + 8 + ... + 2 + 1 = 45

这称为arithmetic progression总和等于:

f(n) = n * (n+1) / 2 = 9 * 10 / 2 = 45

答案 2 :(得分:0)

我会说

f(n) = n * (n-1) / 2

其中n等于需要组合的不同数字的数量。 因此,对于n = 10,它将是:

10 * (10-1) / 2 = 45

答案 3 :(得分:0)

您的问题属于二项式系数。要计算每次采取2个项目的10个项目的唯一组合的总数,公式N! /(K!(N-K)!)可以使用。插入10表示N,2表示K表示45。

我编写了一个类来处理使用二项式系数的常用函数,这是这个问题的类型。它执行以下任务:

  1. 以任意N选择K到文件的格式输出所有K索引。 K索引可以用更具描述性的字符串或字母代替。这种方法使解决这类问题变得非常简单。

  2. 将K索引转换为已排序二项系数表中条目的正确索引。这种技术比依赖迭代的旧发布技术快得多。它通过使用Pascal三角形中固有的数学属性来实现。我的论文谈到了这一点。我相信我是第一个发现和发布这种技术的人,但我可能错了。

  3. 将已排序的二项系数表中的索引转换为相应的K索引。

  4. 使用Mark Dominus方法计算二项式系数,这样就不太可能溢出并使用更大的数字。

  5. 该类是用.NET C#编写的,它提供了一种通过使用通用列表来管理与问题相关的对象(如果有)的方法。此类的构造函数采用名为InitTable的bool值,当为true时,将创建一个通用列表来保存要管理的对象。如果此值为false,则不会创建表。不需要创建表来执行上述4种方法。提供访问者方法来访问该表。

  6. 有一个关联的测试类,它显示了如何使用该类及其方法。它已经过2个案例的广泛测试,并且没有已知的错误。

  7. 要阅读此课程并下载代码,请参阅Tablizing The Binomial Coeffieicent

    将此类转换为C ++应该不难。