我必须为重复对象的排列评估以下公式
n!/(r1! * r2! * r3! * ......... * rn!)
其中n <= 500和1 <= ri <= 10(总共有n个对象,其中r1类似于1种,r2类似于第二种,依此类推,该公式表示此类对象的排列数目)。
n <= 500
1 <= ri <= 10
我需要一个有效的编码解决方案,因为在Java中使用大整数并不能证明在大情况下是有效的。
提前致谢。
您可以使用
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); }
资源