美文网首页
学习算法反思

学习算法反思

作者: 陈桐Caliburn | 来源:发表于2020-03-20 11:22 被阅读0次

现状问题

从2018年开始学习算法,或者可以溯源更早。
现在拾起来有遗忘,遇到为题还是思路没有。
知道了解但不透彻,不能举一反三
现在是2020年了,以现在视角分析2年前未达成目标原因

原因分析

1、编程是一门实践学科,了解概念,还是要动手编写代码
2、没有为自己分阶段制定可落地目标,导致道阻且长,迷茫放弃
3、小目标达成,没有及时给自己进行激励措施
4、没有找到乐趣的切入点,学习还是痛苦的,玩起来会好很多
5、算法是在特定场景下,寻找最优解的套路,学习没有还原应用场景
6、学习概念,但没有刷题

解决方案

1、学习方式:简书+github
2、刷题方式:剑指offer + leecode
3、回顾模式:coding算法范例
4、分阶段设定目标,找到兴趣切入点
5、找出应用场景
6、在本文打卡坚持

意义

算法意义在于在时间和空间中找出最优解
学习算法是掌握一种解决问题的思路和思想

给出一个解法,有没有更好方案

正确的打开思路:
不断追求优化问题,追求O(n),O(nlogn)

打卡

3月23日反思

1、算法面试,考察合理思考路径
一起解决探讨一个问题解决方案的过程,正确只是相对的,算法使用具体环境

2、不要轻视基础算法和数据结构

3、根据所针对问题对象和情景,找出与之合理匹配学习方法和适用难度

4、做题OJ(online judge)工具 leecode(偏大公司面试),HackRanker(技能树专项练习)

5、学习和实践做题之间,掌握平衡。不在于刷题,而是掌握思想

6、解决算法面试整体思路
1、注意给定限制条件和暗示
时间维度、空间维度、数据规模
2、没有思路的另一种解决方式
测试用例、暴力解法
3、优化算法
算法思路,数据结构,
空间和时间交换
对数据进行预处理(排序)
瓶颈处寻找答案,本质还是数学推导
4、实际编写
极端条件判断,代码规范,模块化,复用性

3月23日下午

O表示算法执行的最低上界
时间复杂度
注意要素
1、数据规模
2、多个数据要增加假设变量
3、算法复杂度,参考平均情况
4、编写代码,考虑复杂度震荡

空间复杂度
辅助开辟空间

均摊复杂度分析

排序算法默认复杂度 O(nlogn)

3月24日

如何写出正确程序
1、明确变量的含义
2、循环不变量 ,关注边界情况,最好在 [left...right] 闭区间
3、小数据量调试
4、大数据量测试

3月24日下午

算法题要分析给出限定条件边界
在沟通中,当前场景会给出最优解条件约束

原数组的性质-有序

最直接思考:暴力解法

对撞指针思路

字符串处理
1、空字符串如何看
2、字符定义,数字和字母
3、大小写问题
4、y是否算元音

双索引技术

滑动窗口

子数组
不一定连续的
如果没有解如何处理
多个解如何处理

3月25日

算法理解要采用图形化思维,如果依靠死记硬背,
边界条件变换的时候,代码就是错的

先框定边界条件,询问问题边界

滑动窗口
对撞指针

字符集范围, 英文字母小写
返回解的顺序,任意
没有解,
多个解
是否包含字符串

3月26日

双索引:
指针对撞
滑动窗口
查找表

数组

查找问题

查找有无 set
查找对应 map

常见操作
insert
find
delete
change

二分搜索树

哈希表 失去数据顺序性

map和set平衡二叉树

链表 不支持顺序访问

确定操作节点问题

链表改变next指针方向

Reverse Linked List
指针
pre cur next

虚拟头结点
dummyNode

dummyNode

链表是穿针引线

归并排序

链表双指针技术

边界处理

删除元素 必须有虚拟节点
dummyHead

删除倒数节点 双指针技术

链表 穿针引线
O(nlogn)不适用
归并排序法

链表 可以改变值
双指针

算法学习方式:图示法
任何操作形象成图像,最容易理解

栈stack
递归
二叉树 前中后序遍历

队列queue
图 广度优先遍历
数 层序遍历

问题复杂要转换成图

递归

重点

二叉树与递归 遍历写法

递归终止条件,递归的过程

递归算法
回溯法 -- 树形问题

排序问题
组合问题

回溯法减枝
二维数组

n皇后问题
n-Queens
快速判断不合法情况
快速剪枝

n为4代表穷尽
采用归纳法

用最小模型验证算法

递归是 自上而下解决问题

动态规划 自下而上思考问题

先解决小数据量问题

动态规划定义

将原问题拆解成若干子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题答案

动态规划本质是递归问题。
递归问题->重叠子问题
1、记忆化搜索->自顶向下->减枝
2、动态规划->自底向上

image.png

相关文章

  • 学习算法反思

    现状问题 从2018年开始学习算法,或者可以溯源更早。现在拾起来有遗忘,遇到为题还是思路没有。知道了解但不透彻,不...

  • 4.27日总结

    完成: 学习了模板算法 反思: 内心难以达到微妙的平衡与平静,目前猜测是杂事太多,注意力分散 心得...

  • StanFord 机器学习公开课笔记(4):生成学习算法

    本讲视频及讲义链接 生成学习算法 生成学习算法和判别学习算法的区别 判别学习算法(Discriminative) ...

  • 机器学习(1)——几个基本要素

    学习算法 什么是学习算法,学习当然不是一个动词,学习算法最简单的理解便是能够从数据中学习的算法,学习的解释根据 M...

  • 谁能看懂这个

    机器学习算法盘点:人工神经网络、深度学习 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法...

  • Adaboost算法

    AdaBoost是典型的Boosting算法。Boosting提升算法,是将“弱学习算法“提升为“强学习算法”的过...

  • 机器学习4:局部加权回归

    参数学习算法,非参数学习算法 参数学习算法,用固定的明确的参数进行数据的拟合。比如线性回归。非参数学习算法,使用的...

  • 人工智能学习

    人工智能算法可以分为机器学习算法(Machine Learning)和深度学习算法(Deep Learning) ...

  • 机器学习算法分类大全

    机器学习算法可以分为监督学习算法、无监督学习算法和半监督学习算法,下面以思维导图的形式总结了一下常见的监督学习和无...

  • 《机器学习(周志华)》学习笔记(三)

    Q:机器学习中最简单的学习算法是什么? A:最简单的机器学习算法莫过于线性回归算法了。线性回归算法的基本形式如下:...

网友评论

      本文标题:学习算法反思

      本文链接:https://www.haomeiwen.com/subject/mnndyhtx.html