关于算法的一些思考

二叉树:


traverse(node.left)

traverse(node.right)

每个traverse都可以看做一个二叉树子树
前:在进入二叉树之前,对二叉树进行赋值,限制等操作
中:通常是对当前的root节点进行操作
后:在遍历完二叉树之后,对二叉树进行操作,判断等。
参考链接:学习算法和刷题的框架思维

动态规划与递归搜索:

动态规划自底向上
递归搜索自顶向下
动态规划使用“备忘录”的方式,存储迭代问题的结果,从而获取最终答案。动态规划的四个步骤:
1.确定base case :起始状态
2.确定状态:即要求得最终要求结果的一般状态
3.确定选择:即使状态发生改变的变量
4.明确dp函数/数组的定义

递归搜索本质上与二叉树搜索类似,递归属于压栈出栈操作,类似于多叉树的操作,因此深入学习二叉树解决问题的方法至关重要。
动态规划解题套路框架

回溯算法

回溯算法,顾名思义,关键点在于“回”字,个人认为是递归的一种使用,在递归中的某步有多个选择时,我们需要撤回遍历过的步骤。递归当然也会自动撤销之前栈中的值,但无法撤销不在递归栈中的值,这时,就需要加入撤回操作。
思考三个问题:
1.路径:即已做出的选择
2.选择列表:即当前步可供选择的下一步
3.结束条件:即所有递归操作都需提供的跳出条件
选择步骤应搭配对应的撤回步骤

引用文中的一句话:计算机解决问题其实没有任何奇技淫巧,它唯一的解决办法就是穷举,穷举所有可能性。算法设计无非就是先思考“如何穷举”,然后再追求“如何聪明地穷举”。

你可能感兴趣的:(leetcode,算法,动态规划)