java基础算法优化解决兔子数量以及拓展

18 篇文章 0 订阅
18 篇文章 0 订阅
package javaBlog;


/*
古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:首先我们要明白题目的意思指的是每个月的兔子总对数;假设将兔子分为小中大三种,兔子从出生后三个月后每个月就会生出一对兔子,
那么我们假定第一个月的兔子为小兔子,第二个月为中兔子,第三个月之后就为大兔子,那么第一个月分别有1、0、0,第二个月分别为0、1、0,
第三个月分别为1、0、1,第四个月分别为,1、1、1,第五个月分别为2、1、2,第六个月分别为3、2、3,第七个月分别为5、3、5……
兔子总数分别为:1、1、2、3、5、8、13……
 
于是得出了一个规律,从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和,即为斐波那契数列。*/
public class RabbitNumber {

    private long rabbits = 1;
    private long lastSecondRabbits ,lastRabbits;

    /**
     * 遍历从第一个月到第n个月的兔子总数
     * */
    public void forEachMothsToRabbits(int moths){
        System.out.println(System.currentTimeMillis());
        for (int i = 1;i<= moths;i++) System.out.println("第"+i+"个月兔子数为"+getRabbits(i));
        System.out.println(System.currentTimeMillis());
    }

    /**
     * 获取当前月的兔子总数
     * */
    private long getRabbits(int moths){
        if (moths == 1 || moths==2 ) return rabbits=1;
        else if (moths == 3) return rabbits = 2;
        else{
            //初始化上一个月以及上两个月兔子数量
            if (lastRabbits == 0 && lastSecondRabbits ==0 ){
                lastSecondRabbits = getRabbits(moths-2);
                lastRabbits = getRabbits(moths-1);
            }
            //计算这一个返回的兔子数量
            rabbits= lastRabbits+lastSecondRabbits;
            /*让两个月的兔子数等于上一个月兔子数,让上个月等于这个月兔子数
            为了下一次计算(下月兔子数)更加高效快捷避免过冗余递归影响计算速率*/
            lastSecondRabbits = lastRabbits;
            lastRabbits = rabbits;
            return rabbits ;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java遗传算法路径优化是指利用遗传算法来寻找最优解决方案的一种方法。遗传算法是一种模拟自然选择和遗传机制的计算方法,适用于求解优化问题。 首先,需要确定问题的表达方式。对于路径优化问题,可以使用二进制字符串来表示路径的选择。其中,每一位表示路径中的一个节点,0表示不选择该节点,1表示选择该节点。例如,路径A->B->C->D可以表示为1011。 然后,需要定义适应度函数。适应度函数用于评估给定路径的性能,通常是目标函数的值。例如,对于一个销售员路径优化问题,可以将适应度函数定义为路径的总距离。 接下来,需要采用遗传算法的基本操作来进行优化。包括选择、交叉和突变。 选择操作使用适应度函数来评估每个个体的适应度,并根据适应度进行选择。通常,适应度越高的个体被选择的机会越大。这样可以保留优秀的个体,逐步优化解决方案。 交叉操作模拟遗传过程中的基因交换。选择两个个体的某一位置,将它们的基因片段互换,得到两个新个体。这样可以获得更多的解决方案。 突变操作模拟遗传过程中的基因变异。随机改变个体的某些基因位置,引入新的解决方案,避免陷入局部最优解。 最后,可以进行多代迭代,逐步改进解决方案。每一代都通过选择、交叉和突变操作来产生新的个体,并通过适应度函数对它们进行评估。最终找到适应度最高的解决方案作为最优解。 总的来说,Java遗传算法路径优化通过选择、交叉和突变操作来寻找最优解决方案。它能够在大规模问题中寻找全局最优解,是一种强大而灵活的优化方法。 ### 回答2: Java遗传算法路径优化是一种基于遗传算法优化方法,用于寻找最优路径。该方法模拟了自然选择和遗传机制,通过对候选解(路径)的遗传操作,逐步演化出更优的路径。 首先,需要定义问题的目标函数,即评估路径的好坏程度。比如在旅行商问题中,目标函数可以是路径的总距离或总成本。 然后,需要初始化一个群体,每个个体代表一条路径,例如用数组表示。可以随机生成初始路径,或者根据经验知识设置初始路径。 接下来,通过选择、交叉和变异等遗传操作,对群体中的个体进行演化。选择操作根据个体的适应度(目标函数值)选择较优个体,用于生成下一代个体;交叉操作通过交换个体的片段构造新的路径;变异操作随机改变路径的一部分,增加群体的多样性。 演化过程中,需要注意控制群体的大小,以及选择、交叉和变异的概率等参数的设置。这些参数的合理调整可以提高算法的效率和准确性。 最后,当达到一定的停止条件(例如最大迭代次数或收敛条件)时,可以得到优化后的最优路径。 总之,Java遗传算法路径优化是一种灵活、高效的优化方法,可以用于解决路径优化问题。通过模拟自然界的进化过程,不断改进候选解,找到最优路径,可以应用于多个领域,例如物流规划、路网规划等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值