java中常用的算法思想

算法思想

常用的算法思想有:

  1. 分治算法
  2. 动态规划算法
  3. 贪心算法
  4. 回溯算法
  5. 分支限界算法

分治算法

分治算法的思想是,将一个大问题,拆解成多个小问题。各小问题间彼此独立。
举一个经典场景的例子,求一亿个数中出现次数前10的数。

直接求解的方式是比较困难的:

遍历一亿个数,记录每个数出现的次数,然后排序求前10.

这种解法占用的内存是及其大的。

分治思想解法

把一亿个数 分成10000组,求各个组的出现次数的前十 就比较容易了
然后把10000个组 通过两两合并的方式,最终得到出现次数的前十

关键在于分组时,相同的数不可以存在于多个组中。 也就是保证各小问题彼此之间是独立的。

总结:
分治算法的前提是,

  1. 该大问题,可以拆解成多个独立的小问题。(独立是指此小问题的解不会对其他问题产生影响)
  2. 大问题的解,就存在于各小问题的解之中。或者由各小问题的解组成。

错误示范:

草原上有1000只羊,20只狼,羊的繁殖速度是2倍,狼的繁殖速度是3倍,狼每年吃掉10只羊,问3年后,分别有多少狼和羊?
这个问题就不可以拆解成 分别计算羊和狼。因为狼的计算过程会造成羊的减少。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伞_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值