问题
I have to evaluate the following formula for permutations with repeated objects
n!/(r1! * r2! * r3! * ......... * rn!)
wheren <= 500 and 1 <= ri <= 10 (there are n objects in total out of which r1 are alike of 1 kind , r2 are alike of 2nd kind and so on and the formula indicates the number of permutations of such objects).
I need an efficient coding solution for this because working with big integers in Java doesn't prove to be fruitful for large cases.
Thanks in advance.
回答1:
You can do this in java by using
public class Permutation
designed to achieve a kind of your problem.
See this link for your reference
OR
like this :
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);
}
source
来源:https://stackoverflow.com/questions/9107653/fast-computation-of-multi-category-number-of-combinations