English 中文(简体)
3. 组合 Java Algorithm
原标题:Set Combinatorics Algorithm in Java
  • 时间:2009-10-02 20:41:22
  •  标签:

我有这样的特征:

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个参数的所有可能数值的数据sample。 这种耗尽性确保不能忘记任何参数价值。

    它不必冒犯,其价值可以由一 lo创造。

  • 在每一份数据样本中,你需要增加其他数值。 一种简单的做法是选择你想要测试每张一秒钟的几倍(say N = 100)。 对于每份数据样本,请随机抽取其他数值

如果使用所有200个参数,有1,000个可能的价值,N=100,这将给我们100K试验。


你可以以多种方式阐述这一基本想法:

  • If you want your test to be repeatable, you could generate it only once, store it, and then reuse the same sets in all future tests.
  • You could control your distribution so that each value gets selected a fair number of times.
  • In real life, all 200 parameters wouldn t be without connections. Many parameters would actually be connected to some others, in that the probability of finding the values together are not even. Instead of making the initial exhaustive set on only one parameter as I did previously,
    I would run the exhaustive set on a cluster of connected parameters.
问题回答

采取另一种方式。 如果你有200个变量,而且每个变量至少有2个选择,那么你会再有“大”;=2^200组合。 如果你能产生每秒一个组合,则需要大约10年^43年,以列举2^200选择。

Keith所指出的,如果不存在排除的组合,组合的数量将可能大到极限,这会使你的需求变得难以满足。 然而,既然你已经说过你有相互排斥的选择,解决办法空间就会缩小。

减少多少? 取决于有多少选择是相互排斥的。 我建议在这方面做一些算术,否则会太困难。

假设足够的选择是独一无二的,你仍然不得不基本上加以调整,但你不大可能找到一种现有的、有用的算法。

下面我要谈谈问题:为什么要这样做——彻底测试? 良好,但你可能认为这是不可能的。 我曾碰到这个问题,最后,你很可能被迫将经过仔细选择的“对面”案件与一些半部分选定的其他案件结合起来。

在阅读你上述评论后,你似乎对“相互排斥”的定义与我的定义不同,我担心你可能会有问题。

因此,某个病人不是盲人,也不是盲人。 页: 1 但是,这并不是我(我怀疑这里的每一个人)在提到相互排斥时所理解的。

顺便说一句,我谈论的是,如果盲人,不能不受到处分,或像这样。

在您的属性之间有许多相互排斥的相互关系,限制了它们的组合,因此,你无法完成全面的测试。





相关问题