如何系统地学习数据结构与算法? 您所在的位置:网站首页 武汉理工大学数据结构与算法综合实验多少学时和学分 如何系统地学习数据结构与算法?

如何系统地学习数据结构与算法?

2022-12-07 18:23| 来源: 网络整理| 查看: 265

直接上干货!! 收藏! 算法虐我千百遍,我待算法如初恋

首先,数据结构是为算法服务的,算法要作用在特定的数据结构之上。 因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构;

举个例子: 图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。

那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。

学东西,我一直都强调要首先明确学习目标,这样我们才能去拆解目标,找到一个个最小的学习单元。接下来就看看我给大家学习数据结构与算法确定的学习目标:

确定学习目标知道有哪些常用的数据结构和算法能够写出高性能的底层轮子知道如何进行复杂度分析、性能分析通过不断训练,具备“算法思维”,提高分析和解决实际问题的能力能够自如地应付大厂面试

在讲干货之前,先在这里也送大家一本帮助我拿到BAT 等一线大厂 offer 的算法笔记,是一位阿里大神写的,对于算法薄弱或者需要提高的同学都十分受用,算法一定是计算机学习的重中之重:

2. 制定学习路线

(1)入门

知道数据结构和算法是什么复杂度分析和大 O 表示法稳定性

(2)基础

结合具体的示例,学习各种常用的数据结构和算法知道各常用数据结构的优缺点知道分析各常用算法的复杂度

(3)进阶、高级

不太常用的、比较高级的数据结构和算法,比如红黑树等

(4)实战

研究各经典开源项目中数据结构和算法的使用3. 明确学习要点(重点)不要死记硬背算法实现,你应该试着去理解不同的数据结构、算法的原理是什么,它们是怎么来的,是如何解决不同的问题的分析时间和空间复杂度,知道各个算法和数据结构的优点、缺点是什么,以及适用于解决什么问题,什么情况下更适合采用哪种算法和数据结构算法思想才是更重要的,比如:分而治之、动态规划、贪婪算法等,学习算法思想可以帮你更好地理解算法之间的快慢差异,并学会在算法对时间和空间的使用上做出平衡尝试把数据结构图形化,视觉化一定要自己动手实现一遍学到的知识需要时间慢慢消化、沉淀,不要试图一下子就全部掌握,学习本身就是反复迭代和不断思考的过程。如果学习过程中遇到挫败感,想想“书读百遍其义自见”这句话,可以先跳过这部分理解不了的,后面回过头再学习。

这里有一些经典的算法学习书,我都汇总了,有需要的同学可以看下这里下载:

书单:书单推荐,少即是多(含下载方式)

学习重点(学什么)

想要学习数据结构与算法,最重要的概念是---复杂度分析,必须熟练拿下,否则数据结构与算法等于没学; 学习图谱:

接下来上干货,我们在学习数据结构的时候都有哪些内容:

链表链表双向链表哈希表/散列表 (Hash Table)散列函数碰撞解决字符串算法排序查找 BF算法KMP算法BM算法正则表达式数据压缩二叉树二叉查找树伸展树(splay tree 分裂树)平衡二叉树AVL红黑树B树,B+,B*R树Trie树(前缀树)后缀树最优二叉树(赫夫曼树)二叉堆 (大根堆,小根堆)二项树二项堆斐波那契堆(Fibonacci Heap)图的算法图的存储结构和基本操作(建立,遍历,删除节点,添加节点)最小生成树拓扑排序关键路径最短路径: Floyd,Dijkstra,bellman-ford,spfa排序算法

交换排序算法

冒泡排序插入排序选择排序希尔排序快排归并排序堆排序

线性排序算法

桶排序查找算法顺序表查找:顺序查找有序表查找:二分查找分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到块中顺序查找动态查找: 二叉排序树,AVL树,B- ,B+ (这里之所以叫 动态查找表,是因为表结构是查找的过程中动态生成的)哈希表: O(1)15个经典基础算法Hash快速排序快递选择SELECTBFS/DFS (广度/深度优先遍历)红黑树 (一种自平衡的二叉查找树)KMP 字符串匹配算法DP (动态规划 dynamic programming)A*寻路算法: 求解最短路径Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的)遗传算法启发式搜索图像特征提取之SIFT算法傅立叶变换SPFA(shortest path faster algorithm) 单元最短路径算法海量数据处理Hash映射/分而治之BitmapBloom filter(布隆过滤器)Trie树数据库索引倒排索引(Inverted Index)双层桶划分外排序simhash算法分布处理之Mapreduce算法设计思想迭代法穷举搜索法递推法动态规划贪心算法回溯分治算法算法题目选编

这是一个算法题目合集,题目是我从网络和书籍之中整理而来,部分题目已经做了思路整理。问题分类包括:

字符串堆和栈链表数值问题数组和数列问题矩阵问题二叉树图海量数据处理智力思维训练系统设计学习资源推荐

视频可以看看 :

mooc 上浙大的《数据结构》: .浙江大学《数据结构》 由知乎「陈越姥姥」和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。 这门课程对每一种重要的经典数据结构都从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。手把手教授小白如何将解决问题的抽象算法用具体的代码实现,从而引导初学者更好地入门。 学堂在线上清华邓俊辉老师的《数据结构与算法》 邓俊辉教授讲课,非常的深入浅出,强烈推荐

这两个是我看过觉得不错的才在这推荐,第一个是初学数据结构时跟着看,第二个是大三复习时刷的。

入门版书籍可以看看:

《啊哈算法》《算法图解》

稍微进阶点的:

《算法第四版》 这本书强烈推荐,难度适中,但是全面。

终极版:

《算法导论》 这个量力而行就好了。。。 算法设计《算法设计与分析基础》《算法引论》 告诉你如何创造算法 断货《Algorithm Design Manual》算法设计手册 红皮书《算法导论》 是一本对算法介绍比较全面的经典书籍《Algorithms on Strings,Trees and Sequences》《Advanced Data Structures》 各种诡异高级的数据结构和算法 如元胞自动机、斐波纳契堆、线段树 600块

有了基础的算法思想和数据结构储备,剩下的就是刷题了:

刷题必备《剑指offer》《编程之美》《编程之法:面试和算法心得》《算法谜题》 都是思维题

刷题网站:

leetcode 建议分类刷,先易后难,比如数组、二分、二叉树、动态规划,一个一个系列搞定,总结经验,保证 150 道简单和中等以上吧 lintcode

国外算法练习网站

最重要的是,保持手感,有空就刷一道。

必备书单

1、啊哈!算法(豆瓣评分7.7)

这是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。

2. 算法图解

图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。

3.大话数据结构(豆瓣评分7.9)

《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。

4. 算法之美(豆瓣8.0分)

这本书告诉我们如何更有效地利用直觉、什么时候应该把选择权交给命运、无所适从的时候应该如何做出选择,以及如何有效地与他人保持联系。从找配偶到找停车位,从组织管理个人邮箱的收件箱到理解人类记忆的作用原理,这本书把计算机科学的智慧转化为人类生活的策略,引导我们做出明智的选择。

5.编程珠玑(豆瓣评分9.1

本书是计算机科学方面的经典名著。书的内容围绕程序设计人员面对的一系列实际问题展开。作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路。本书对各个层次的程序员都具有很高的阅读价值。

**6.算法导论(原书第3版)(豆瓣评分9.2)

本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。

这些经典的算法学习书,我都汇总了,有需要的同学可以看下这里下载:

书单:书单推荐,少即是多(含下载方式)

推荐阅读:

如果觉得不错的话,记得帮我 @编程指北 点个赞哟~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有