![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 97
csdn_SUSAN
成长才是最重要的!
展开
-
动态规划的理论总结--数据结构与算法之美--CH41
文章目录1. 引言2. 动态规划可以解决什么问题2.1 一个模型2.2 三个特征2.2.1 最优子结构2.2.2 无后效性2.2.3 重复子问题3. 动态规划常规解题思路3.1 状态转移表法3.2 状态转移方程法1. 引言 在CH40中以0-1背包问题,从回溯算法到备忘录再到引入动态规划,可以从实践角度看到动态规划是如何解决问题的。 &emsp知其然,更要知其所以然,那么本节将站在...原创 2019-11-20 21:59:28 · 542 阅读 · 0 评论 -
动态规划的引入--数据结构与算法之美--CH40
文章目录1. 什么是动态规划2. 再看0-1背包问题2.1 递归回溯算法2.2 递归回溯+备忘录2.3 动态规划算法3. 升级版 0-1背包问题3.1 递归回溯算法3.2 动态规划求解4. 动态规划空间复杂度再优化4.1 普通 0-1 背包问题优化4.2 升级版 0-1 背包问题优化4.3 哨兵优化1. 什么是动态规划 在CH39讲回溯算法谈到回溯算法本质是枚举所有可能的路径,然后求取可行解...原创 2019-11-20 17:32:15 · 287 阅读 · 0 评论 -
回溯算法--数据结构与算法之美--CH39
文章目录1. 什么是回溯算法2. 回溯算法解决什么问题3. 回溯算法应用实例3.1 8皇后问题3.2 0-1背包问题3.3 正则表达式问题1. 什么是回溯算法 在CH37贪心算法一节讲到贪心算法的本质:“问题求解分K个步骤,每一步都选择当前最优的选择,最终得到一个方案”。但是这个方案并不一定是最优解,那怎么才能得到全局最优解呢?这就需要回溯算法来帮忙。 回溯算法的思想类似深度优先搜索,K...原创 2019-11-04 15:50:03 · 262 阅读 · 0 评论 -
分治算法--数据结构与算法之美--CH38
文章目录1. 什么是分治算法2. 分治算法解决什么问题3. 分治算法案例分析3.1 逆序对求解3.2 MapReduce实现4. 思考心得1. 什么是分治算法 学了之前的课程,分治算法其实已经不陌生了。分治算法顾名思义“分而治之”,前边学过的快速排序,归并排序,二分查找,都是这种思想的应用。 分治算法是一种思想,一般适合用递归实现,递归是一种编程技巧。2. 分治算法解决什么问题适合分...原创 2019-10-30 21:54:47 · 324 阅读 · 0 评论 -
贪心算法--数据结构与算法之美--CH37
文章目录1. 引言2. 什么贪心算法3. 什么情况下可以用贪心算法3.1 贪心算法有效3.2 贪心算法失效4. 贪心算法实战分析4.1 分糖果4.2 钱币找零4.3 区间覆盖4.4 霍夫曼编码5. 贪心算法的思考1. 引言 数据结构与算法之美的前述总结,已经基本将所有常用的数据结构和算法学习完了。 本节以及后边几个总结,将就4个算法思想进行学习:贪心算法,分治算法,回溯算法,动态规划。这...原创 2019-10-28 21:50:30 · 840 阅读 · 0 评论 -
字符串匹配算法--数据结构与算法之美--CH32
文章目录1. 什么是字符串匹配2. 如何实现字符串匹配2.1 BF算法2.2.1 BF算法常用原因2.2 RK算法2.2.1 hash 算法的设计2.2.2 散列冲突处理3. 其他算法简介4. 思考总结1. 什么是字符串匹配 “字符串匹配”就是在一个长字符串A中搜索一个短的字符串B,此时A称为主串,B称为模式串。 把主串A的长度记作 n,模式串B的长度记作 m,因为在主串中查找模式串,所...原创 2019-10-27 13:03:01 · 355 阅读 · 0 评论 -
图和图的遍历--数据结构与算法之美--CH30、CH31
文章目录1. 图的概念1.1 无向图1.2 有向图1.3 加权图2. 图的存储2.1 邻接矩阵2.2 邻接表2.3 逆邻接表3. 图的搜索3.1 图的表示3.2 广度优先搜索3.2.1 代码实现3.2.2 复杂度分析3.3 深度优先搜索3.3.1 代码实现3.3.2 复杂度分析4. 心得体会1. 图的概念 图是一种特殊的非线性数据结构,由顶点和边组成。如下图所示: 顶点的度,就是与该顶...原创 2019-10-22 21:15:55 · 518 阅读 · 0 评论 -
堆和堆的应用--数据结构与算法之美--CH28、CH29
文章目录1. 什么是堆2. 堆的操作2.1 堆的插入2.2 删除堆顶元素3. 堆排序3.1 原地建堆3.2 排序3.3 对比快速排序4. 堆的实际应用4.1 优先级队列4.1.1 合并有序文件4.1.2 高性能定时器4.2 求TOP K4.3 求中位数1. 什么是堆 堆是一种特殊的树,需要满足两点要求:堆是一种完全二叉树每个节点的值都大于等于(或小于等于)其子树节点的值,因此,堆被分成...原创 2019-10-17 21:56:01 · 736 阅读 · 0 评论 -
平衡二叉树、红黑树--数据结构与算法之美--CH25、C26
文章目录1. 平衡二叉树引入2. 平衡二叉树定义3. 红黑树4. 红黑树的操作技巧1. 平衡二叉树引入 二叉查找树支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是 O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2nlog_2nlog2n 的情况,极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n...原创 2019-10-14 15:33:48 · 456 阅读 · 0 评论 -
二叉树--数据结构与算法之美--CH23、CH24
文章目录1. 什么是树2. 树的基本概念3. 二叉树3.1 满二叉树3.2 完全二叉树3.3 二叉树存储3.4 二叉树遍历4. 二叉查找树4.1 操作分析4.1.1 查找4.1.2 插入4.1.3 删除4.1.4 其他4.2 支持重复数据存储4.3 时间复杂度分析5. 思考解答1. 什么是树 树是n(n>=0)个结点的非线性表结构,n=0时称为空树。在任意一棵非空树中:有且仅有一个...原创 2019-10-10 15:31:31 · 732 阅读 · 0 评论 -
哈希算法--数据结构与算法之美--CH21、CH22
文章目录1. 概述1.1 什么是哈希算法1.2 如何设计优秀的哈希算法2. 安全加密3. 唯一标识4. 数据校验5. 散列函数6. 负载均衡7. 数据分片8. 分布式存储9. 思考解答1. 概述1.1 什么是哈希算法 一句话:将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。1.2 如何设计优秀的哈希算法单...原创 2019-10-09 16:17:24 · 621 阅读 · 0 评论 -
散列表--数据结构与算法之美--CH18、CH19、CH20
文章目录1 散列表概述1.1 散列表的由来1.2 散列函数1.3 散列冲突及解决1.3.1 开放寻址法1.3.2 链表法2 工业级散列表2.1 散列函数的设计2.2 装载因子及动态扩容2.3 选择合适的散列冲突解决办法3 散列表和链表的组合使用3.1 再看LRU缓存淘汰算法3.1.1 链表实现3.2.1 链表+散列表实现3.2 Redis有序集合的实现3.3 java LinkedHashMap分...原创 2019-10-09 11:38:39 · 787 阅读 · 0 评论 -
跳表--数据结构与算法之美--CH17
文章目录1. 什么是跳表2. 跳表的复杂度分析2.1 查找的时间复杂度2.2 插入、删除的时间复杂度2.3 空间复杂度2.4 空间复杂度优化3. 跳表的动态更新4. 跳表小结5. 问题思考5.1 为什么Redias用跳表来实现有序集合而不是红黑树?5.2 如果3个节点抽取,5个几点抽取一个,则时间复杂度为多少?1. 什么是跳表 跳表是为了解决"二分查找无法应用到链表"的问题而产生的。 跳...原创 2019-10-08 17:39:53 · 548 阅读 · 0 评论 -
二分查找(下)变体问题--数据结构和算法之美--CH16
文章目录1. 概述2. 二分查找变体问题2.1 查找第一个值等于给定值的元素2.2 查找最后一个值等于给定值的元素2.3 查找第一个大于等于给定值的元素2.4 查找最后一个小于等于给定值的元素3. 适用性分析4. 问题解答1. 概述不知道你有没有听过这样一个说法:“十个二分九个错”。二分查找虽然原理极其简单,但是想要写出没有 Bug 的二分查找并不容易。 唐纳德·克努特(Donald E.Kn...原创 2019-09-17 17:16:47 · 468 阅读 · 0 评论 -
数据结构与算法之美---CH03+CH04---复杂度分析
文章目录0. 什么是复杂度分析1. 复杂度分析的重要性2. 为什么要进行复杂度分析3. 如何进行复杂分析(1) 大O表示法(2) 3种时间复杂度分析方法(3) 常见的时间复杂度(4) 空间复杂度(5) 如何熟练4 复杂度分析的4个概念4.1 最好,最坏,平均和均摊4.2 为什么引入4个概念4.3 平均和均摊复杂度计算5 课后思考0. 什么是复杂度分析 一段算法程序,需要从时间和空间两个维度评...原创 2019-07-01 21:57:58 · 503 阅读 · 0 评论 -
数据结构与算法之美---CH05---数组
文章目录0. 开篇问题1. 什么是数组1.1 线性表1.2 连续内存空间和相同类型数据1.3 数组和链表的区别2. 低效的“插入”“删除”2.1 插入时间复杂度及优化2.2 删除时间复杂度及优化3. 警惕数组越界4. 容器是否能够替代数组4.1 容器的优势4.2 数组应用场景5.解开篇问题6. 课后思考0. 开篇问题为什么数组从0开始编号,而不是从1开始?1. 什么是数组 数组(Arra...原创 2019-07-02 12:34:29 · 488 阅读 · 0 评论 -
数据结构与算法之美---CH09---队列
文章目录0. 开篇问题1. 什么是队列?2. 为什么需要队列?3. 如何实现一个队列?3.1 顺序队列3.2 链式队列4. 几种特殊的队列4.1 循环队列4.2 阻塞队列4.3 并发队列5. 解开篇答6. 课后思考0. 开篇问题 CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理...原创 2019-07-08 17:20:10 · 440 阅读 · 0 评论 -
数据结构与算法之美---CH06+CH07---链表
文章目录0. 开篇问题1. 什么是链表2. 常见链表结构2.1 单链表2.2 循环链表2.3 双向链表2.4 双向循环链表3. 数组和链表的抉择3.1 优缺点对比3.2 如何选择5. 解开篇答5. 写出bug free的链表代码的技巧5.1 理解指针或引用的含义5.2 警惕指针丢失和内存泄漏5.3 利用“哨兵”简化实现难度5.3.1 特殊节点处理繁琐5.3.2 应用“哨兵”简化处理5.4 重点留...原创 2019-07-03 14:28:45 · 546 阅读 · 0 评论 -
数据结构与算法之美---CH08---栈
文章目录0. 开篇问题1. 什么是栈?2. 为什么需要栈?3. 如何实现一个栈?3.1 顺序栈3.2 链式栈3.3 支持动态扩容的栈4. 栈的应用4.1 函数调用栈4.2 表达式求值4.3 括号匹配中应用5. 解开篇答6. 课后思考6.1 函数调用栈6.2 JVM堆栈概念0. 开篇问题 假设你是 Chrome 浏览器的开发工程师,你会如何实现网页前进后退的功能?1. 什么是栈? 栈是一...原创 2019-07-05 14:57:53 · 428 阅读 · 0 评论 -
递归-- 数据结构与算法之美--CH10
文章目录1. 什么是递归2. 为什么需要递归3. 怎么使用递归3.2 不要深入思考递归3.2 一个递归实例4. 递归需要注意的问题5. 递归代码使用非递归实现6. 解开篇答7. 课后思考1. 什么是递归 从程序语言上来看,“递归”就是指方法在其定义中直接或间接的调用自身的一种编程技巧。 从其英文“Recursion”上来看,该过程分为“re-(again)”+“curs-(come)”,...原创 2019-09-02 16:55:24 · 498 阅读 · 1 评论 -
冒泡、插入、选择排序算法--数据结构和算法之美--CH11
文章目录1. 排序算法概述2. 如何分析排序算法2.1 时间复杂度2.1.1 最好,最坏和平均时间复杂度2.1.2 时间复杂度的系数、常数、低阶2.1.3 比较次数和交换(或移动)次数2.2 空间复杂度2.3 稳定性3. 三种$O(n^2)$排序算法详解3.1 冒泡排序3.1.1 算法步骤3.1.2 时间复杂度3.1.2.1 有序度3.1.3 空间复杂度3.1.4 算法稳定性3.1.5 冒泡优化3...原创 2019-09-03 17:47:11 · 499 阅读 · 0 评论 -
归并和快速排序算法--数据结构和算法之美--CH12
文章目录1. 概述2. 归并排序2.1 原理分析2.2 递推公式和终止条件2.3 伪代码2.3 性能分析2.3.1 算法稳定性2.3.2 时间复杂度2.3.3 空间复杂度3. 快速排序3.1 原理分析3.2 递推公式和终止条件3.3 伪代码3.3 性能分析3.3.1 算法稳定性3.3.2 时间复杂度3.3.3 空间复杂度4. 归并排序与快速排序的区别5. 解开篇答5. 课后思考1. 概述 本...原创 2019-09-05 15:29:16 · 584 阅读 · 2 评论 -
桶排序、计数排序、基数排序--数据结构和算法之美--CH13
文章目录1. 概述2. 桶排序2.1 原理分析2.2 时间复杂度分析2.3 使用条件2.4 适用场景3. 计数排序3.1 原理分析3.2 思路步骤3.3 代码实现3.4 使用条件4. 基数排序4.1 原理分析4.2 时间复杂度4.3 使用条件5. 解开篇答6. 课后思考1. 概述 本节介绍三种时间复杂度为O(n)O(n)O(n)的排序算法,桶排序、计数排序和基数排序。这两种排序都是利用了分治...原创 2019-09-05 16:42:57 · 535 阅读 · 0 评论 -
如何实现工业级的排序函数--数据结构和算法之美--CH14
文章目录1. 概述2. 如何选择排序算法3. 如何优化快速排序4. 通用排序算法实现技巧5. 分析java中排序算法的实现6. 典型问题1. 概述 排序算法有很多种,每种排序算法都可以从时间复杂度,稳定性和是否是原地排序进行衡量。并不是时间复杂度低的算法就一定最好,不同的排序算法,应用场景不同,如何选择排序算法,如何实现一个通用的工业级排序算法,需要根据不同的情况,做出恰当的选择。2. 如...原创 2019-09-17 15:36:09 · 610 阅读 · 0 评论 -
二分查找(上)--数据结构和算法之美--CH15
文章目录1. 什么是二分查找2. 二分查找的时间复杂度3. 二分查找实现3.1 非递归实现3.2 递归实现4.二分查找应用场景5. 问题解答1. 什么是二分查找 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。 每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。2. 二分查找的时间复杂度 二分查找,每次执行完成...原创 2019-09-17 16:30:29 · 507 阅读 · 0 评论 -
数据结构与算法之美---CH01+CH02---是什么为什么怎么做
文章目录0 什么是数据结构和算法1 为什么学习2 学习什么3 怎么学习0 什么是数据结构和算法1、数据结构是指一组数据的存储结构2、算法就是操作数据的方法3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上1 为什么学习(1) 大学时候没有认真学习,甚至像我这种没有计算机科班背景的人,对数据结构和算法总是陌生和恐惧。(2) 工作中比较少接触,做客户...原创 2019-06-21 14:19:17 · 983 阅读 · 0 评论