动态规划
菲波那切数列
以斐波那契数列为例,解法有两种-递归和动态规划,动态规划的方法更优。
为什么说动态规划解法更优秀呢?
递归的解法会碰到一个问题(overlap sub-problem重叠子问题),这就使得每一个f(n)都需要从头递归到最后,其中存在大量的重复计算,利用动态规划的方法可以规避这些额外运算,降低时间复杂度
递归遍历斐波那契额数列时间复杂度是O(2^n) 回想一下一个满二叉树的全部结点公式(2^n-1)
通过动态规划方式时间复杂度为O(n) (其中借助了记忆化搜索)
典型题型
最大值/最优解
通常该类题目可用“选和不选”这种方法来解决
例题1
目前有8个任务,同时只能执行一个任务,任务间可能存在时间冲突,每个任务完成后有相应收益,求怎样才能挣最多的钱,是多少?
例2
有以上一组数字,从中取出一组数字,该组数字两两不相邻,其最大值是多少?
|
|
例3
给定一组数,从中抓取任意数量的数字,使其和为s,如果存在这种情况,返回true,不存在返回false
arr={3,34,4,12,5,2}
s=9
思考
|
|
|
|
例4
你需要爬一个n阶台阶,每次可以向上走1至2步,那么n阶台阶有多少种走法呢?(leetcode)
例5
Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Note that you cannot sell a stock before you buy one.
Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Not 7-1 = 6, as selling price needs to be larger than buying price.
|
|
参考资料
动态规划一般写成非递归形式
动态规划和递归的关系是什么?动态规划属于思想,递归是动态规划实现的一种方式吗?
建立备忘录的迭代就是动态规划
动态规划自底向上
递归 一定要有递归出口 参见递归
出口条件
记忆化搜索
爬楼梯
背包
overlap sub-problem
重叠子问题
剪枝 去掉不需要的情况
subset
go语言查漏补缺
简单记录一下go语言开发过程中碰到的一些小曲折
金融常识
平时生活比较闭塞,大多时间只关注代码,对金融知识了解很少,平时一涉及到理财、局势判定等等完全没有自己的想法,只能跟着各种营销号走,于是打算平时也多接触接触相关知识,并在这里做个记录。
《从零开始学架构》学习笔记(一) 架构到底是什么
解读http协议
解读ssh协议
平时一直在用ssh,却不知道内部运行原理,在此小补一下。
shell编程笔记
[TOC]
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序,业界所说的 shell 通常都是指 shell 脚本。