数据结构和算法.pptx
《数据结构和算法.pptx》由会员分享,可在线阅读,更多相关《数据结构和算法.pptx(91页珍藏版)》请在课桌文档上搜索。
1、数据结构和算法,01,为什么要学习数据结构和算法,为什么要学习数据结构和算法,02,如何高效学习数据结构和算法,如何高效学习数据结构和算法,学习技巧:,04,20个常用、基础的数据结构和算法,05,书籍推荐,06,概念:广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法,01,学习基础:高中数学、基本编辑技巧,02,学习重点:复杂度分析,03,如何高效学习数据结构和算法,学习技巧:,01,02,03,04,1.边学边练,适度刷题,2.多问、多思考、多互动,3.打怪升级学习法,4.知识需要沉淀,不要想试图一下子掌握所有,如何高效学习数据结构和算法,20个常用、基础的数据结构和
2、算法,单击此处添加标题,9,300 Million,单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。,数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树,算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法,03,复杂度分析,复杂度分析,事后统计法的局限性,1.测试结果非常依赖测试环境,01,2.测试结果受数据规模的影响很大,02,复杂度分析,大 O 复杂度表示法,03,1.公式:T(n)=O(f(n),2.代码的执行
3、时间 T(n)与每行代码的执行次数 n 成正比,3.代码执行时间随数据规模增长的变化趋势,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。,02,01,时间复杂度分析,知识点 最好情况时间复杂度最坏情况时间复杂度平均情况时间复杂度(又称加权平均时间复杂度或者期望时间复杂度)均摊时间复杂度(一种特殊的平均时间复杂度),技巧 1.只关注循环执行次数最多的一段代码2.加法法则:总复杂度等于量级最大的那段代码的复杂度3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积,时间复杂度量级,多项式 1.常量O(1)2.对数阶O(logn)、O(nlogn)
4、3.两个数据规模 O(m+n)、O(m*n)非多项式 1.O(2n)2.O(n!),复杂度分析,空间复杂度,空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。,常见的空间复杂度就是 O(1)、O(n)、O(n2),04,数组,数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。,数组,定义,特点,1.线性表(Linear List),2.连续的内存空间和相同类型的数据,3.时间复杂度,插入删除O(n)查找O(1),线性表:数组、链表、队列、栈非线性表:二叉树、堆、图,
5、05,链表,链表,LRU 缓存淘汰算法,单击此处添加标题,9,300 Million,先进先出策略 FIFO(First In,First Out),最少使用策略 LFU(Least Frequently Used),最近最少使用策略 LRU(Least Recently Used),单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。,1.链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”2.每个结点除了存储数据之外,还需要记录链上的下一个结点的地址,记录下个结
6、点地址的指针叫作后继指针 next 3.第一个结点叫作头结点,头结点用来记录链表的基地址。4.最后一个结点叫作尾结点,尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上最后一个结点。5.时间复杂度 插入删除O(1)查找O(n),单链表,链表,循环链表,1.循环链表是一种特殊的单链表,2.尾结点指针是指向链表的头结点,双向链表,1.每个结点不止有一个后继指针 next 指向后面的结点,还有一个前驱指针 prev 指向前面的结点,链表,链表,双向环链表,链表,链表VS数组,1插入删除:数组O(n)链表O(1),2随机访问:数组O(1)链表O(n),链表,编写链
7、表代码技巧,01,技巧一:理解指针或引用的含义,02,技巧二:警惕指针丢失和内存泄漏,03,技巧三:利用哨兵简化实现难度,04,技巧四:重点留意边界条件处理,05,技巧五:举例画图,辅助思考,06,技巧六:多写多练,没有捷径,链表,常见的链表操作,01,单链表反转,链表中环的检测,02,03,04,05,两个有序的链表合并,删除链表倒数第 n 个结点,求链表的中间结点,06,栈,栈,栈在函数调用中的应用,栈在括号匹配中的应用,56%Option 2,47%Option 4,特性,栈在表达式求值中的应用,1.后进者先出,先进者后出,这就是典型的“栈”结构2.一种“操作受限”的线性表3.用数组实现
8、的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。,30%Option 3,23%Option 1,07,队列,队列,01,1.先进者先出,这就是典型的“队列”2.操作受限的线性表数据结构3.用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。,特性,02,循环队列,03,阻塞队列和并发队列,08,递归,递归,1,4,2,3,1.一个问题的解可以分解为几个子问题的解2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样3.存在递归终止条件,递归需要满足的三个条件,怎么将递归代码改写为非递归代码?,递归注意事项,如何编写递归代码?,写递归代码的关键就是找到如何将大问题分解
9、为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码,1.递归代码要警惕堆栈溢出2.递归代码要警惕重复计算,09,排序,如何分析一个“排序算法”,冒泡排序(Bubble Sort),插入排序(Insertion Sort),选择排序(Selection Sort),归并排序(Merge Sort),快速排序(Quick Sort),排序,单击此处添加文本具体内容,简明扼要的阐述您的观点。根据需要可酌情增减文字,以便观者准确的理解您传达的思想。,单击此处添加标题,排序,线性排序排序优化,排序,如何分析一个“排序算法”,A,B,C,执行效率,内存消耗,稳定
10、性,执行效率,1.最好情况、最坏情况、平均情况时间复杂度2.时间复杂度的系数、常数、低阶3.比较次数和交换(或移动)次数,内存消耗,1.通过空间复杂度衡量内存的消耗2.原地排序算法,就是特指空间复杂度是 O(1)的排序算法,1.如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变,稳定性,冒泡排序(Bubble Sort),冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。最好情况时间复杂度O(n)最坏情
11、况复杂度O(n)平均时间复杂度操作原子,比较和交换,排序,有序度:数组中具有有序关系的元素对的个数,逆序度:逆序度的定义正好跟有序度相反,满有序度:完全有序的数组的有序度,公式:逆序度=满有序度-有序度,公式:n*(n-1)/2,推理方式,平均时间复杂度,复杂度O(n),插入排序(Insertion Sort),将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。最好情况时间复杂度O
12、(n)最坏情况复杂度O(n)平均时间复杂度O(n)操作原子,比较和移动,排序,排序,选择排序(Selection Sort),01,选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。,02,最好情况时间复杂度O(n),03,最坏情况复杂度O(n),04,平均时间复杂度O(n),排序,归并排序(Merge Sort),归并排序的核心思想还是蛮简单的。如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。,分治思想,性能分析,重
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法
链接地址:https://www.desk33.com/p-362938.html