java - 在 Java 中设置组合算法

标签 java algorithm combinatorics

我有一个具有如下属性的数据集:

Marital_status = {M,S,W,D}
IsBlind = {Y,N}
IsDisabled = {Y,N}
IsVetaran = {Y,N}

等大约有 200 个这样的变量。

我需要一种算法来生成属性的组合,一次只有一个值。

换句话说,我的第一个组合是:

Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = Y

下一组是:

Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = N

我尝试使用一个简单的组合生成器,将每个属性的每个值视为一个属性本身。它没有用,因为相互排斥的选择包含在组合中,并且可能的组合数量确实很大(准确地说是 133873417996074857185490633899939406700260683726864088366400)

能否请您推荐一个算法(最好用 Java 编码)?

谢谢!!

最佳答案

正如其他人(以及您自己)指出的那样,不可能对此进行详尽的测试。

我建议您采用抽样方法,然后用它进行测试。你有很强的理论背景,所以你将能够在互联网上找到自己的方式来找到和理解这一点。


但让我举个小例子。现在,我将忽略可能的参数“集群”(密切相关)。

  • 创建一个数据样本,其中包含所有 200 个参数的所有可能值。这种详尽性确保不会忘记任何参数值。

    It doesn't have to be created upfront, the values can be created by a loop.

  • 对于一个数据的每个样本,您需要添加其他值。一种简单的方法是选择要测试每个样本的次数(比如 N = 100)。对于一个数据的每个样本,您将随机生成 N 倍其他值

If there are 1000 possible values using all 200 parameters, and N=100, that would give us 100K tests.


您可以通过多种方式详细说明这个基本思想:

  • 如果您希望您的测试可重复,您可以只生成一次,存储它,然后在所有 future 测试中重复使用相同的集合。
  • 您可以控制您的分配,以便每个值都被选择了相当多的次数
  • 在现实生活中,所有 200 个参数并非没有联系。许多参数实际上会与其他一些参数相关联,因为一起找到这些值的概率是不均匀的。不像我以前那样只对一个参数进行初始详尽设置,
    我会在一组连接的参数上运行详尽的集合

关于java - 在 Java 中设置组合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511698/

相关文章:

java - Spring Security @Secured 注解和用户权限

java - 如何将表行绑定(bind)到 jsf 中的编辑按钮?

c++ - 寻找最小楼梯成本的动态规划问题的错误答案

java - 单次通过条目集合的断言

html - 我将如何收集尽可能多的文本 : "[subject] are ..." from the web? 实例

arrays - 比较两个数组并找出差异

c++ - 从模板包生成所有大小为 N 的子包

algorithm - 最大化阵列之间的最小距离

c - C中的矩阵问题

java - 将布局渲染的输出设置为变量(条纹)