小编典典

快速计算多类别组合的数量

java

我必须为重复对象的排列评估以下公式

n!/(r1! * r2! * r3! * ......... * rn!)

其中n <= 5001 <= ri <= 10(总共有n个对象,其中r1类似于1种,r2类似于第二种,依此类推,该公式表示此类对象的排列数目)。

我需要一个有效的编码解决方案,因为在Java中使用大整数并不能证明在大情况下是有效的。

提前致谢。


阅读 217

收藏
2020-11-01

共1个答案

小编典典

您可以使用

public class Permutation

设计来解决您的问题。

请参阅此链接以供参考

要么

像这样 :

private static Double calculatePermutationEntropy(List<Double> values, int baseOrder) {
 int valuesSize = values.size();
 if (baseOrder >= valuesSize + 1) {
   throw new RuntimeException("The size of the values is bigger than the order");
 }

 List<String> result = new ArrayList<String>();
 // iterate over the input
 for (int i = 0; i < valuesSize - baseOrder + 1; i++) {
   List<Double> neightbors = values.subList(i, i + baseOrder);

   List<Double> orderedValues = new ArrayList<Double>(neightbors);

   String window = "";
   for (int j = 0; j < neightbors.size(); j++) {
     // add the indexes in a string representation
     window += orderedValues.indexOf(neightbors.get(j));
   }
 result.add(window);
 }
 // use the shannon entropy calculation to get the result
 return calculateShannonEntropy(result);
}

资源

2020-11-01