【20180312】python-minds-算法思维

基础算法思维:

1.穷举&遍历

2.递推

例如:兔子繁殖问题,构建带有月份属性的兔子数据结构,按月份递增循环模拟兔子繁殖来推算;

3.回溯

4.递归

例如:对长度为n的列表,生成n*n-1*n-2*n-3*...*3*2*1种情况的排列;

高级算法思维:

1.分治

分治法所能解决的问题一般具有以下几个特征:

    1) 该问题的规模缩小到一定的程度就可以容易地解决
    2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
    3) 利用该问题分解出的子问题的解可以合并为该问题的解;
    4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

分治常与递归一同应用,以最大子序列问题为例:

对于最大子序列问题,普通方法是全遍历的穷举然后比较,算法复杂度高且耗时长;

进阶一下可以对序列进行处理,去除两端的负数并将序列中相邻的正数或负数合并,以降低复杂度;

从递归角度来分析,把序列分为两部分,最大子序列可能出现在左半部分,或者右半部分,或者是两者之间。两者之间的情况下,先对左半部分求以最后一个数字为结尾的最大序列和。然后对右半部分以第一个数字开始算最大序列和,将两者加起来即是;

从另外一种角度来分析,通过对算法目标(子序列最大和)的理解抽象出一些事实规则,通过判断实时更新的子序列和或小于0或大于当前max来进行处理,达到一次循环完成计算的目的。

link:https://blog.youkuaiyun.com/zwhlxl/article/details/42649979

2.动态规划

动态规划是算法思维中最有趣的部分也是比较困难的部分,因此单开一篇来记录学习。

3.贪心

TBD


其他:

例如:针对长度为n的数字列表,判断是否能组成顺子炸弹金 (456 or 666)

可以抽象为从0到9的顺序数字对应个数,顺子即为某一位数字个数大于0且连续后两位数字个数大于0,

炸弹即为某一位数字个数大于3,通过从0到9循环判断和不断减去已发现的顺子和炸弹数字个数,判断

最后是否有剩余数字个数来得出结论。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值