【发布时间】:2020-05-26 18:17:42
【问题描述】:
给定一个像这样的简单表格:
+---------+---------+---------+
| Column1 | Column2 | Column3 |
+---------+---------+---------+
| A | J | Q |
| A | K | S |
| B | M | R |
| B | N | S |
| B | J | Q |
| C | K | R |
| D | J | R |
| D | J | Q |
| E | L | Q |
+---------+---------+---------+
是否可以确定该表中是否存在 N 行的子集,使得对于每一列,所有 N 值都是不同的?
例如,当 N = 3 时,答案将是是
+---------+---------+---------+
| Column1 | Column2 | Column3 |
+---------+---------+---------+
| A | J | Q |
| B | N | S |
| C | K | R |
+---------+---------+---------+
有没有一个简单的算法可以对这样的问题得出结论?
【问题讨论】:
-
如果您使用的是 SQL,则可以使用 distinct 关键字来达到此目的。 w3schools.com/sql/sql_distinct.asp - 此外,如果您使用的是 Java 之类的东西,则可以使用集合之类的东西来实现此目的。因此,如果您再次添加相同的条目,它将忽略它。
-
@JGFMK 不,不一样。如果至少一列不同,JGFMK 将认为两行不同。但是在这里,所需的子集必须在每列中独立地具有不同的值。
-
我不明白这个问题。您如何首先提出 B N S,而不是 B M R。对我来说似乎是随机选择,没有模式。
-
@JGFMK 如果你使用
B M R那么你不能选择第三行,因为Q和R在第3列用完了,B在第1列用完了。 -
@JGFMK 问题是“判断该表中是否存在N行的子集,使得每一列的所有N个值都是不同的”。 N = 3 的答案是“真”。这是一个决策问题,而不是优化问题,输出不必是实际的三行集合;该问题仅显示这三行来解释为什么该示例的答案是“正确的”。
标签: algorithm subset distinct-values