数据结构与算法之美02

前两篇都是介绍性的,就不做记录。

02 如何抓住重点,系统高效地学习数据结构与算法

一、什么是数据结构?什么是算法?

广义上,数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法。

狭义上,指某些著名的数据结构和算法,例如队列、栈、二分查找、动态规划等。

关系:数据结构是为算法服务的,算法要作用在特定的数据结构之上。例如,数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据。但如果我们选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。

二、学习的重点

  • 复杂度分析

空间复杂度、时间复杂度(最好、最坏、平均、均摊)

  • 基本算法思想

贪心算法、分治算法、动态规划、回溯算法、枚举算法

  • 排序

O(n^2):冒泡排序、插入排序、选择排序、希尔排序

O(nlogn):归并排序、快速排序、堆排序

O(n):计数排序、基数排序、桶排序

  • 搜索

深度优先搜索、广度优先搜索、A*启发式搜索

  • 查找

线性查找、树结构查找、散列表查找

  • 线性表

数组

链表:单链表、双向链表、循环链表、双向循环链表、静态链表

栈:顺序栈、链式栈

队列:普通队列、双端队列、阻塞队列、并发队列、阻塞并发队列

  • 散列表

散列表函数、冲突解决(链表法、开放寻址、其他)、动态扩容、位图

二叉树:平衡二叉树、二叉查找树、平衡二叉查找树(AVL树、红黑树)、完全二叉树、满二叉树

多路查找树:8树、8+树、2-3树、2-3-4树

堆:小顶堆、大顶堆、优先级队列、斐波那契堆、二项堆

其他:树状数组、线段树

图的存储(邻接矩阵、邻接表)、拓扑排序、最短路径、关键路径、最小生成树、二分图、最大流

接下来将会学习20个最常用的、最基础数据结构与算法。这里面包括10个数据结构数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、trie树10个算法递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

学习数据结构和算法过程中,不要只是死记硬背,而是要学习它的来历、自身的特点、适合解决的问题以及实际的应用场景。学习数据结构和算法的过程是非常好的思维训练的过程。

三、一些让你事半功倍的学习技巧

  • 边学边练,适度刷题

每周花1-2个小时的时间,集中把这周的三节内容涉及的数据结构和算法自己写出来,用代码实现一遍。

  • 多学、多思考、多互动

学习最好的方法是,找到几个人一起学习,一块讨论切磋,有问题及时寻求老师解答。

  • 打怪升级学习法

学习的过程中,碰到最大的问题就是,坚持不下来。在枯燥的学习过程中,可以给自己设立一个切实可行的目标。

  • 知识需要沉淀、不要想试图一下子掌握所有

学习知识的过程是反复迭代、不断沉淀的过程。

 

 

我自己定的Flag:1.记录每一篇学习笔记及感想。

                             2.每周末抽出3小时进行代码实现(python、c++各实现一遍)。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据结构与算法之美02)