如何获取数据库中一组唯一对的总数?

Kir*_*met 41 database math

4项:

A
B
C
D
Run Code Online (Sandbox Code Playgroud)

可能有6对独特的:

AB
AC
AD
BC
BD
CD
Run Code Online (Sandbox Code Playgroud)

如果我有100个起始项怎么办?有多少独特的对?有没有一个公式,我可以把它扔进去?

Mik*_*sen 61

你要找的是n选择k.基本上:

在此输入图像描述

对于每对100个项目,您将拥有4,950个组合 - 提供顺序无关紧要(AB和BA被视为单一组合)并且您不想重复(AA不是有效对).

  • `n`将是项目数(在您的情况下为100),而`k`将是每组中的元素数(在您的情况下为2). (13认同)
  • 没问题.我认为大多数现代编程语言都内置了*组合*函数.如果你有Excel方便,你也可以使用函数`= COMBIN(100,2)`. (5认同)
  • 帮助我,我是愚蠢的 - 你可以把100个项目投入到这个等式中来教我 (4认同)
  • [这是一个在线的](http://www.mathsisfun.com/combinatorics/combinations-permutations-calculator.html) (3认同)
  • 顺便说一句,对于“k=2”,公式简化为“n(n-1)/2”。 (2认同)

小智 48

TLDR; 式是n(n-1)/2其中n是在该组的物品的数量.

说明:

要查找一组,其中对受独特的对数交换律 (AB = BA),就可以计算出总和1 + 2 + ... + (n-1)地方n是在设定项目的数量.

推理如下,比如你有4个项目:

A
B
C
D
Run Code Online (Sandbox Code Playgroud)

可以配对的项目数量A为3,或者n-1:

AB
AC
AD
Run Code Online (Sandbox Code Playgroud)

由此可见,可与配对的项目数Bn-2(因为B已经配对A):

BC
BD
Run Code Online (Sandbox Code Playgroud)

等等...

(n-1) + (n-2) + ... + (n-(n-1))
Run Code Online (Sandbox Code Playgroud)

这是一样的

1 + 2 + ... + (n-1)
Run Code Online (Sandbox Code Playgroud)

要么

n(n-1)/2
Run Code Online (Sandbox Code Playgroud)

  • 这和 (n-1) 不一样!这升级得更快。这类似于三角形数,其公式为 (n+1)n/2(该系列在位置上相差 1)。(n-1)n/2 对于 n=1,2,3,... = 0, 1, 3, 6, 10, 15, 21, 28, 36, ... (3认同)

Jon*_*oni 34

这就是你可以自己解决这些问题的方法:

该对中的第一个可以以N(= 100)方式挑选.您不想再次选择此项目,因此可以以N-1(= 99)方式选择该对中的第二个.总共可以从N(N-1)(= 100*99 = 9900)不同的方式中选择N个中的2个项目.

但是坚持下去,这样你也算不同的顺序:AB和BA都被计算在内.由于每对被计数两次,您必须将N(N-1)除以2(您可以订购两个项目列表的方式的数量).使用一组N可以制作的两个子集的数量则为N(N-1)/ 2(= 9900/2 = 4950).


ato*_*fat 8

我正在解决这个算法并陷入对部分的困境。

这个解释对我很有帮助 https://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/

所以要计算一系列数字的总和:

n(n+1)/2
Run Code Online (Sandbox Code Playgroud)

但是你需要计算这个

1 + 2 + ... + (n-1)
Run Code Online (Sandbox Code Playgroud)

所以为了得到这个,你可以使用

n(n+1)/2 - n
Run Code Online (Sandbox Code Playgroud)

这等于

n(n-1)/2
Run Code Online (Sandbox Code Playgroud)

  • 从同样的算法问题来到这里! (2认同)