数据与结构的四大经典算法思想

贪心算法(greedy algorithm)

解题思路:
1.针对一组数据,定义了限制值和期望值,在满足限制值的情况下,期望值最大
2.每次选择当前情况下,最对限制值同等贡献的情况下,对期望值贡献最大的数据
3.举几个例子验证一下贪心算法的正确性

在很多情况下贪心算法并不能给出问题的最优解,因为贪心算法总是选择当前情况下最优的解,比如在有权图中寻找最短路径,可能因为选择了当前的最优解,而放弃了其他路径之后的最优解。

贪心算法的经典实战:背包问题,分糖果问题,钱币找零,区间覆盖,哈夫曼编码

分治算法(divide and conquer)

核心就是:分而治之,将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归的解决这些子问题,然后再合并结果,就得到原问题的解。

分支算法是一种处理问题的思想,递归是编码的一种技巧。一般需要用分支算法解决的问题都用递归来解决。

分支算法在大数据中应用的比较明显

分支算法的经典实战:求数组的逆序对个数

回溯算法(backtracking algorithm)

回溯的处理思想有点类似于枚举,枚举出所有的解,找到符合期望值的解。把问题求解的过程分为几个阶段,每个阶段,我们都会做出选择,就像走路一样,当发现这条路走不通,我们就回到上一个岔路口,重新选择,知道找到期望值。

回溯算法的经典实战:八皇后问题,零一背包问题

动态规划(dynamic programming)

什么样的问题适合用动态规划? “一个模型,三个特征”:
多阶段决策最优解模型:
1.最优子结构:问题的最优解,包含子问题的最优解
2.无后效性:某阶段的状态,不受之后的状态的影响,同时只用知道前面状态值,不用管前面的状 态是怎么来的
3.重复子问题:不同的决策序列,到达某个相同的阶段时,可能会产生重复的状态

一般用贪心算法解决的问题,都能够用动态规划来解决

动态规划的经典实战:0-1 背包问题,最小路径和

转载于:https://my.oschina.net/happywe/blog/3051446

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值