2种值的可能唯一组合5种不同方式

时间:2018-04-25 16:41:41

标签: mysql matrix

这很简单,但我不确定最好的方法是计算这个,我是数据编程的新手。 我有一个包含5列和2个值Y和N的表。如何在行中获得Y和N的所有唯一可能组合?这可能是任何两个值,但我使用的是Y和N.屏幕截图和视觉下方的我试图手动执行此操作。

YYYYY
NNNNN
YNYNY
NYNYN
NYYYY
NNYYY
NNNYY
NNNNY

2 个答案:

答案 0 :(得分:3)

从一个更简单的问题开始。 Y或N有多少独特的组合?只有一个:没有元素的组合。

一个 Y或N有多少个独特的组合?有两个:

N Y

两个 Y或N有多少个独特的组合?有四个:

NN NY YN YY

三?有八个:

NNN NNY NYN NYY YNN YNY YYN YYY

0有1,1有2,有2有4,3有8,...你现在应该猜到k Y N的k组合有两个。

我们通过以下算法从旧组合形成新组合:

  • 如果我们有零元素,那么结果就是空列表。
  • 如果我们有k> 0个元素,列出k-1个元素。 “加倍”列表并用N或Y扩展每一对。

如果最后一个例子不清楚,让我们再看一下3。我们首先解决2的问题:

NN NY YN YY

然后我们加倍

NN NN NY NY YN YN YY YY

然后我们添加N,Y,N,Y,N,Y,N,Y来获得

NNN NNY NYN NYY YNN YNY YYN YYY

在数据语言中,此操作是具有本身的序列的笛卡尔积。它也被称为“交叉连接”,因为它在带有X交叉的代数中表示。这是{N,Y} x {N,Y} x {N,Y} x {N,Y} x {N,Y}

练习:对于包含三个元素{A,B,C}的序列,您会如何做?有多少种k元素组合?

练习:订购10个Y或N的方式有多少,每个只有5个?你会如何产生那些组合?同样,从一个更简单的问题开始,并推动您解决更难的问题

进一步阅读:如果您对如何在C#中执行这些操作感兴趣,多年来我已经写了很多文章:

https://ericlippert.com/2010/06/28/computing-a-cartesian-product-with-linq/

https://ericlippert.com/2013/04/15/producing-permutations-part-one/

https://ericlippert.com/2014/10/13/producing-combinations-part-one/

答案 1 :(得分:1)

我会使用五行来源的CROSS JOIN。

SELECT t1.custom1
     , t2.custom2
     , t3.custom3
     , t4.custom4
     , t5.custom5
  FROM ( SELECT 'Y' AS custom1 UNION ALL SELECT 'N' ) t1 
 CROSS
  JOIN ( SELECT 'Y' AS custom2 UNION ALL SELECT 'N' ) t2 
 CROSS
  JOIN ( SELECT 'Y' AS custom3 UNION ALL SELECT 'N' ) t3 
 CROSS
  JOIN ( SELECT 'Y' AS custom4 UNION ALL SELECT 'N' ) t4 
 CROSS
  JOIN ( SELECT 'Y' AS custom5 UNION ALL SELECT 'N' ) t5 
 ORDER
    BY t1.custom1 DESC
     , t2.custom2 DESC
     , t3.custom3 DESC
     , t4.custom4 DESC
     , t5.custom5 DESC