sri*_*lla 3 java algorithm combinatorics
我有一个包含如下属性的数据集:
Marital_status = {M,S,W,D}
IsBlind = {Y,N}
IsDisabled = {Y,N}
IsVetaran = {Y,N}
Run Code Online (Sandbox Code Playgroud)
大约有200个这样的变量.
我需要一个算法来生成属性的组合,一次只有一个值.
换句话说,我的第一个组合是:
Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = Y
Run Code Online (Sandbox Code Playgroud)
下一组将是:
Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = N
Run Code Online (Sandbox Code Playgroud)
我尝试使用一个简单的组合生成器,将每个属性的每个值视为属性本身.它不起作用,因为组合中包含互斥的选择,可能的组合数量非常巨大(准确地说是133873417996074857185490633899939406700260683726864088366400)
你能建议一个算法(最好用Java编码)吗?
谢谢!!
找另一种方式.如果您有200个变量,并且每个变量至少有2个选项,那么您将拥有> = 2 ^ 200个组合.如果您每纳秒生成一个组合,则需要大约10 ^ 43年来枚举2 ^ 200个选项.
正如其他人所指出的那样(也是你自己),不可能对此进行详尽的测试.
我建议你采取抽样方法,然后进行测试.你有很强的理论背景,所以你将能够在互联网上找到并理解这一点.
但是,让我举一个小例子.现在,我将忽略可能的"集群"参数(与之密切相关).
创建一个数据样本,包含所有200个参数的所有可能值.这种穷举确保了不会忘记任何参数值.
它不必预先创建,值可以通过循环创建.
对于一个数据的每个样本,您需要添加其他值.一种简单的方法是选择您想要测试每个样本的次数(比如说N = 100).对于一个数据的每个样本,您将随机生成其他值的N倍.
如果使用所有200个参数有1000个可能的值,并且N = 100,那将给我们100K测试.
您可以通过多种方式详细阐述这一基本概念: