首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中计算组合?使用memoization?

如何在java中计算组合?使用memoization?
EN

Stack Overflow用户
提问于 2012-10-07 05:46:56
回答 2查看 1.7K关注 0票数 0

我自己也在学习JAVA,现在我也在学习memoization。但我有点迷路了.

有谁有一些关于如何在Java中通过使用递归和使用memoization来加速算法来计算组合的示例代码?

比如计算C5,3 = 5*4*3/3*2*1 = 10?但是使用递归呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-07 06:12:35

让我们用一个示例20 choose 5来实现它

由于20 choose 5被定义为20! / ( 5! * (20-5)! )

所以:

代码语言:javascript
复制
    //STORING FACTORIAL COMPUTATIONS
    private Map<Integer,Long> factorialMap = new HashMap<Integer,Long>();


    public Long getFactorial(int number) {

        //CHECK IF I ALREADY COMPUTED THIS FACTORIAL
        Long val = factorialMap.get(number);
        if(val != null) {
            //GOT IT!
            return val;
        } else {
            //NEED TO COMPUTE!
            val = getFactorialRecursive(number);
            //STORING IT TO SAVE COMPUTATION FOR LATER
            factorialMap.put(number, val);
            return val;
        }
    }

    //RECURSIVE FUNCTION TO COMPUTE FACTORIAL
    public Long getFactorialRecursive(int number) {
        if(number < 2) {
            return 1L;
        } else {
            return number * getFactorialRecursive(number-1);
        }
    }


    //ACTUAL CALL TO "20 choose 5"
    public Long combination(int fromVal, int chooseVal) {
        return getFactorial(fromVal)/(getFactorial(chooseVal)*getFactorial(fromVal-chooseVal));
    }
票数 1
EN

Stack Overflow用户

发布于 2012-10-07 05:50:40

您可以在此处免费使用combinatoricslib库:

http://code.google.com/p/combinatoricslib/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12764158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档