Java 多类别组合数的快速计算
对于重复对象的排列,我必须计算以下公式Java 多类别组合数的快速计算,java,c++,c,combinatorics,Java,C++,C,Combinatorics,对于重复对象的排列,我必须计算以下公式 n/(r1!*r2!*r3!*……………*rn!) 其中n您可以在java中使用 public class Permutation 旨在实现一种你的问题 请参阅此链接以了解您的详细信息 或 像这样: private static Double calculatePermutationEntropy(List<Double> values, int baseOrder) { int valuesSize = values.size(); i
n/(r1!*r2!*r3!*……………*rn!)
其中
n您可以在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);
}
private static Double-calculatepermutation熵(列表值,int-baseOrder){
int valuesSize=values.size();
如果(baseOrder>=valuesSize+1){
抛出新的RuntimeException(“值的大小大于顺序”);
}
列表结果=新建ArrayList();
//迭代输入
对于(int i=0;i
您可以在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);
}
private static Double-calculatepermutation熵(列表值,int-baseOrder){
int valuesSize=values.size();
如果(baseOrder>=valuesSize+1){
抛出新的RuntimeException(“值的大小大于顺序”);
}
列表结果=新建ArrayList();
//迭代输入
对于(int i=0;i
我通过使用大整数和除法的正态乘法计算阶乘对其进行了天真的编码,但程序挂起在边界情况下,这就是我需要它的原因:(:(嗯,减少这个分数的机会很多。我会尝试C库gmp()。我被要求进一步阐述我关于如何减少分数的建议,现在开始。由于n现在,使用BigInteger
-类型的类将非取消因子相乘。在任何点上都不需要除法运算。也不需要任何分数。我天真地用B通过正常乘法计算阶乘iIntegers和除法,但程序依赖于边界情况,这就是我需要它的原因:(:(好吧,减少这个分数有很多机会。我想试试C库gmp()。我被要求进一步阐述我关于如何减少分数的建议,现在开始。既然n现在,使用biginger
-类型的类将非取消因子相乘。任何时候都不需要除法运算。也不需要任何分数。你能解释一下你写了什么吗?你访问过我指定的链接吗在许多组合问题中应该没有分数。因此没有理由使用double
@Ben Viogt:我的错误!!谢谢你指出它!!!你能解释一下你写的东西吗?你访问过我指定的链接吗?在许多组合问题中应该没有分数。因此没有理由使用double
@Ben Viogt:我的错误!!谢谢你指出这一点。。!!!