我有一些事件,他们每个人都有可能发生,如果他们这样做,他们就会有重量.我想用相应的权重创建事件概率的所有可能组合.最后,我需要按重量顺序排序.这就像生成一个概率树,但我只关心生成的叶子,而不是它们获取它们的节点.我不需要在创建最终结果期间查找特定条目,只需创建所有值并按重量对它们进行排序.
将会有大约5-15个事件,但由于n ^事件有2 ^ n的可能性,并且这是经常做的,我不希望它花费不必要的长时间.速度比使用的存储量重要得多.
我提出的解决方案有效,但速度很慢.想要更快的解决方案或一些改进的想法吗?
class ProbWeight {
double prob;
double eventWeight;
public ProbWeight(double aProb, double aeventWeight) {
prob = aProb;
eventWeight = aeventWeight;
}
public ProbWeight(ProbWeight aCellProb) {
prob = aCellProb.getProb();
eventWeight = aCellProb.geteventWeight();
}
public double getProb(){
return prob;
}
public double geteventWeight(){
return eventWeight;
}
public void doesHappen(ProbWeight aProb) {
prob*=aProb.getProb();
eventWeight += aProb.geteventWeight();
}
public void doesNotHappen(ProbWeight aProb) {
prob*=(1-aProb.getProb());
}
}
//Data generation for testing
List<ProbWeight> dataList = new ArrayList<ProbWeight>();
for (int i =0; …Run Code Online (Sandbox Code Playgroud)