01-算法笔记-数据结构与算法总览

如何有效学习数据结构与算法

期待目标:

  • 职业顶尖级别 - 对于算法数据结构的理解

  • 一线互联网公司面试

  • LeetCode 300+ 的积累

引申一个方法论

如果想精通某个领域,大概有三步骤如下:

  • 1.Chunk it up 切碎知识点
  • 2.Deliberate Practicing 刻意练习
  • 3.Feedback 反馈

源自:中文版译名:《异类:不一样的成功启示录》作者:尔科姆·格拉德威尔

1.Chunk it up 切碎知识点

1.1 背景:

要对知识点进行**庖丁解牛**(先分解打散) 和对知识点的**脉络连接**(再组织链接)

举例:打游戏里CS,星际,LOL这些,里面有不同的技能需要训练,如下:
• 控兵(微操)
• 运营
• 战术
• 热键操作 vs 鼠标操作
• …

故对数据结构和算法也不外如是,接下来我们数据结构和算法进行分解:

1.2 数据结构大脉络

  • 一维:
    • 基础:数组 array (string), 链表 linked list
    • 高级:栈 stack, 队列 queue, 双端队列 deque, 集合 set, 映射 map (hash or map), etc
  • 二维:
    • 基础:树 tree, 图 graph
    • 高级:二叉搜索树 binary search tree (red-black tree, AVL), 堆 heap, 并查集 disjoint set, 字典树 Trie, etc
  • 特殊:
    • 位运算 Bitwise, 布隆过滤器 BloomFilter
    • LRU Cache

注意:了解每个数据结构的原理和代码框架
脑图如下:数据结构脑图
数据结构脑图

1.3 算法大脉络

  • 基础(条件判断,循环结构与递归)
    • If-else, switch —> branch
    • for, while loop —> Iteration
    • 递归 Recursion 【 Divide(分解) & Conquer(治理), Backtrace(回溯)】
  • 高级
    • 搜索 Search: 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*, etc
    • 动态规划 Dynamic Programming
    • 二分查找 Binary Search
    • 贪心 Greedy
    • 数学 Math , 几何 Geometry

注意:在头脑中回忆上面每种算法的思想和代码模板
脑图如下:算法脑图
算法脑图

课堂作业:自己动手绘制一份数据结构和算法脑图
用脑图的方式把知识的脉络串联起来,不管对于学习新知识还是巩固已有知识,都是一种很好的学习方式。同学们可以将目前自己所掌握的数据结构和算法知识绘制成脑图,在绘制过程中可以查阅资料,补充目前掌握欠缺的部分,找到自己薄弱的地方。后面再通过课程的学习和刻意练习,动态地将自己绘制的脑图逐步补充、完善,从而达到真正的融会贯通。

2.Deliberate Practicing 刻意练习

2.1背景:

  • 基本功是区别业余和职业选手的根本

  • 基础动作的分解训练和反复练习 —> 最大的误区(以为简单就练一次足够了)

2.2 如何进行刻意练习

  • 刻意练习 — 过遍数(“五毒神掌法”,后面会具体提到如何操作)
  • 专门练习缺陷、弱点地方
  • 不舒服、不爽、枯燥,有这种感觉就对了
  • 生活中例子:乒乓球、台球、游戏等等

3.Feedback 反馈

问题:如何对自己的学习成果进行总结或者评价:

  • 即时反馈(看代码是否AC)
  • 主动型反馈(自己去找)
    • 高手代码 (GitHub, LeetCode, etc.)
    • 第一视角直播
  • 被动式反馈(高手给你指点)
    • code review
    • 教练看你打,给你反馈

切题四件套(战术)

  • Clarification(很重要,搞清楚问题是什么意思)
  • Possible solutions (把尽可能想到的解决方案都试一试,不能限于一个思路,一开始可以拿脑图对照究竟可以用哪些工具解决这个问题)
    • compare (time/space,注意对比时间复杂度还有空间复杂度,能用到的解题思路谁相对更优)
    • optimal(加强)
  • Coding(多写)
  • Test cases

五步刷题法-五毒神掌(战略)

刷题第一遍

  • 5分钟:读题 + 思考 (觉得自己读题较慢,理解较慢,最多可以放宽到15分钟)
  • 直接看解法:注意!多解法,比较解法优劣
  • 背诵、默写好的解法

刷题第二遍

  • 马上自己写 —> LeetCode 提交
  • 多种解法比较、体会 —> 优化

刷题第三遍

  • 过了一天后,再重复做题
  • 不同解法的熟练程度 —> 专项练习

刷题第四遍

  • 过了一周:反复回来练习相同题目

刷题第五遍

  • 面试前一周恢复性训练
  • 41
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值