算法和数据结构总览

算法和数据结构总览

如何精通一个领域

  1. Chunk it up 切碎知识点
  • 庖丁解牛
  • 脉络连接

    数据结构

  • 一维
    • 基础:数组array(string),链表linked list
    • 高级:栈stack,队列queue,双端队列deque,集合set,映射map(hash or map),……
  • 二维:
    • 基础:树tree,图graph
    • 高级:二叉搜索树binary search tree(red-black tree,AVL),堆heap,并查集disjoint set,字典树Trie,……
  • 特殊:
    • 位运算Bitwise,布隆过滤器BloomFiter
    • LRU Cache
      注意:了解每个数据结构的原理和代码框架
      数据结构脑图

算法

  • if-else,switch——>branch(分支)
  • for,while loop——>iteration(循环,迭代)
  • 递归Recursion(Divide & Conquer,Backtrace)
  • 搜索Search:深度优先搜索Depth first search(DFS),广度优先搜索Breadth first search(BFS),A*,……
  • 动态规划Dynamic Programming
  • 二分查找Binary Search
  • 贪心Greedy
  • 数学Math,几何Geometry
    注意:在头脑中会议上面每种算法的思想和代码模板
    算法脑图
  1. Deliberate Practicing刻意练习

    职业化运动

  • 基本功是区别业余和职业选手的根本
  • 基础动作的分解训练和反复练习->最关键的点
    • 乒乓球
    • 台球
    • 滑雪

      练习的方法

  • 刻意练习——过遍数
  • 练习缺点、弱点地方
  • 不舒服、不爽、枯燥
  • 生活中例子:乒乓球、台球、游戏等等
  1. Feedback 反馈

    Feedback

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

      切题四件套

  • Clarification(说明问题的解法)
  • Possible solutions(找到可以解决的方法)
    • compare(time/space)(比较时间复杂度和空间复杂度)
    • optimal(加强)(找到最佳的解法)
  • Coding(多写)
  • Test cases(举出测试用例)

五步刷题法

刷题第一遍

  • 5分钟:读题+思考
  • 直接看解法:注意!多解法,比较解法优劣
  • 背诵,默写好的解法

    刷题第二遍

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

    刷题第三遍

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

    刷题第四遍

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

    刷题第五遍

  • 面试前一周恢复性训练

原文地址:https://www.cnblogs.com/liugangjiayou/p/12368789.html

时间: 2024-10-13 09:46:28

算法和数据结构总览的相关文章

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

【算法与数据结构】哈希表-链地址法

哈希表的链地址法来解决冲突问题 将所有关键字为同义词的记录存储在同一个线性链表中,假设某哈希函数产生的哈希地址在区间[0, m - 1]上,则设立一个至振兴向量 Chain  ChainHash[m]; 数据结构 //链表结点 typedef struct _tagNode { int data; //元素值(关键字) struct _tagNode* next; //下一个结点 }Node, *PNode; //哈希表结点 typedef struct _tagHashTable { //这里

《 常见算法与数据结构》平衡查找树(2)——红黑树(附动画)

本系列文章主要介绍常用的算法和数据结构的知识,记录的是<Algorithms I/II>课程的内容,采用的是"算法(第4版)"这本红宝书作为学习教材的,语言是java.这本书的名气我不用多说吧?豆瓣评分9.4,我自己也认为是极好的学习算法的书籍. 通过这系列文章,可以加深对数据结构和基本算法的理解(个人认为比学校讲的清晰多了),并加深对java的理解. 红黑树介绍 红黑树是一种简单的实现2-3树的数据结构,它方便的把我们之前实现的二叉搜索树改造成了一棵2-3树.它的核心思想

如何学好算法和数据结构之我见——51CTO名家访谈实录

最近受邀参加"51CTO名家访谈"就算法与数据结构话题论道做答,希望这些问题能够解答各位读者朋友的心中疑惑. 活动网址如下: http://book.51cto.com/act/exp/zuofei 下面是活动中Q&A环节我的一些作答,希望可以作为正在学习算法的朋友们的一些经验参考. 算法到底是什么? 非形式地说,算法是为实现某个任务而构造的简单指令集.以日常用语来说,算法又称为 过程或者方法.算法在数学中也起着非常重要的作用.古代数学文献中就包含有执行各种各样计算任务的算法描

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开

算法与数据结构基础1:动态数组

恶补算法与数据结构,从很基础的开始,先看动态数组的实现. // array.h #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Array { public: // ************************************************************************** // 类的四大函数:构造函数.拷贝构

浅谈算法和数据结构: 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

算法与数据结构基础10:C++实现——拓扑排序

一 定义 拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序, 它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面. 二 先决条件 能够进行拓扑排序图有两个先决条件:有向.无环,即有向无环图. 三 偏序全序 连通图:任意两点之间都存在至少一条边 偏序:非连通图(有向无环图满足偏序关系) 全序:单连通图 四 结果唯一性 对于仅满足偏序关系的有向无环图中,因为有两个点之间的关系是不确定的,所以导致排序的结果是不唯一的. 满足全序关系的有