此分类下的文章是学习极客时间专栏——数据结构与算法之美的笔记,专栏作者是王争大神。
不知道会不会被CSDN限流。。。
什么是数据结构?什么是算法?
我们现在学习不是为了考试,所以不能死抠概念。虽然说没有必要深挖严格的定义,但是这并不等于不需要理解概念。
从广义上讲:数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法
举个小例子:图书馆在储藏书籍时,管理员一般会将书籍分门别类的进行“存储”,按照一定的编号,就是书籍这种“数据”的存储结构。
如何查找一本书呢?有几种方法,一种是一本一本地找,也可以根据书籍类别的编号,是人文,还是科学、计算机来定位暑假,然后再依次查找。可以说,这些查找方法都是算法。
狭义上讲:算法是某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等
数据结构和算法的关系
数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上,因此无法鼓励数据结构来讲算法,也无法孤立算法来讲数据结构
王争待审举例说,数组具有随机访问的特点,常用的二分查找法需要用数组来存储数据,如果选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。
数据结构是静态地,她只是组织数据的一种方式,如果不在它的基础上操作、构建算法,鼓励存在的数据结构就是没用的。
学习重点
学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分析。
它占据了数据结构和算法这门课的半壁江山,是数据结构和算法的精髓。
算法的复杂度分析是指:数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法。
复杂度分析相当于心法,算法的的特点和用法相当于口诀
常用的十个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
十个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
一些小技巧
1.边学边练,适度刷题
将涉及的内容全部自己写出来,用代码实现一遍
2.多问多思考
学习的最好方法是找到几个人一块学习,一块讨论切磋
3.打怪升级学习法
学习的过程中,最大的问题是坚持不下来
我们可以在枯燥的学习过程中,给自己设立一个切实可行的目标,就像打怪升级一样,如写一篇笔记或者心得
我就是以写笔记的方式记录
4.知识需要沉淀,不要试图一下子掌握所有
知识的学习过程是反复迭代,不断沉淀的过程,看一遍就想把所有知识掌握,这肯定是不可能的。