Hello World

随笔分类 -  数据结构与算法

摘要:1. 快速排序 1.1 排序原理 在数组中找一个分界元素,将数组分为两个区间,小于分界元素的全部放在分界元素之前,其他的放在分界元素之后; 在分出来的两个区间(不包括分界元素)重复上述过程,直到区间缩小为1; 1.2 性能分析 1.2.1 执行效率 最好情况时间复杂度:数据每次分为对等的两个区间,时 阅读全文
posted @ 2019-03-06 22:27 小小忧愁米粒大 阅读(205) 评论(0) 推荐(0) 编辑
摘要:1. 归并排序 1.1 排序原理 采用分治思想,一般用递归实现 将一个无序数组从中间分成两个无序数组,然后对两个无序数组排序,排序之后再将两个有序数组合并为一个有序数组; 1.2 性能分析 1.2.1 执行效率 它的效率和原始数组的元素顺序无关,效率稳定;最好,最坏,平均复杂度都一样; 假设n个元素 阅读全文
posted @ 2019-03-06 22:26 小小忧愁米粒大 阅读(386) 评论(0) 推荐(0) 编辑
摘要:1. 选择排序 1.1 排序原理 将数组分为两个区间,一个有序区间,一个无序区间。开始默认数组为无序区间; 从无序区间取最小的一个元素,将最小的元素与无序区间的第一个元素交换位置,即插入有序区间的末尾; 重复这个过程,直到无序区间没有元素; 1.2 性能分析 1.2.1 执行效率 最小时间复杂度:数 阅读全文
posted @ 2019-03-06 22:24 小小忧愁米粒大 阅读(142) 评论(0) 推荐(0) 编辑
摘要:1. 插入排序 1.1 排序原理 将数组分为两个区间,一个有序区间,一个无序区间。开始默认第一个元素为有序区间; 从无序区间取一个元素,在有序区间找到合适的位置将其插入; 重复这个过程,直到无序区间没有元素; 1.2 性能分析 1.2.1 执行效率 最小时间复杂度:数据完全有序时,只需进行一次遍历操 阅读全文
posted @ 2019-03-06 22:23 小小忧愁米粒大 阅读(141) 评论(0) 推荐(0) 编辑
摘要:1. 如何分析一个排序算法? 1.1 执行效率 从以下3个方面来衡量: 最好情况、最坏情况、平均情况时间复杂度; 时间复杂度的系数、常数、低阶:排序的数据量比较小时考虑; 比较次数和交换(或移动)次数; 1.2 内存消耗 通过空间复杂度来衡量。针对排序算法的空间复杂度,引入原地排序的概念,原地排序算 阅读全文
posted @ 2018-11-05 23:23 小小忧愁米粒大 阅读(185) 评论(0) 推荐(0) 编辑
摘要:一. 递归 方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。 递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。 常见的递归公式: f(n) = f(n-1) + 1; f(n) = f(n-1) + f(n-2); 阅读全文
posted @ 2018-11-02 12:23 小小忧愁米粒大 阅读(237) 评论(0) 推荐(0) 编辑
摘要:一、概念 队列也是一种操作受限的线性表。 先进先出,后进后出。这就是典型的“队列”结构。 两个基本属性: head:指向队头的指针;一般指向第一个元素的位置。 tail :指向队尾的指针;一般指向最后一个元素的下一个位置。 两个基本操作: 入队enqueue(),将一个元素放到队列末尾; 出队deq 阅读全文
posted @ 2018-10-24 18:17 小小忧愁米粒大 阅读(430) 评论(0) 推荐(0) 编辑
摘要:一、什么是栈? 二、为什么需要栈? 三、如何实现栈? 1. 栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。 2.数组实现(自动扩容) 时间复杂度分析:根据均摊复杂度的定义,可以得数组实现(自动扩容)符合大多数情况是O(1)级别复杂度,个别情 阅读全文
posted @ 2018-10-24 14:39 小小忧愁米粒大 阅读(799) 评论(0) 推荐(0) 编辑
摘要:【原代码链接】:王铮老师的课后题答案 阅读全文
posted @ 2018-10-24 09:37 小小忧愁米粒大 阅读(402) 评论(0) 推荐(0) 编辑
摘要:一、什么是链表 二、链表的优劣 三、常用链表 3.1 单链表 3.2 循环链表 3.3 双向链表 和单链表相比,存储相同的数据,需要消耗更多的存储空间。 插入、删除操作比单链表效率更高O(1)级别。 以删除操作为例,删除操作分为2种情况:给定数据值删除对应节点和给定节点地址删除节点。 对于前一种情况 阅读全文
posted @ 2018-10-22 19:58 小小忧愁米粒大 阅读(942) 评论(0) 推荐(0) 编辑
摘要:1. 数组 2. 数组下标随机访问 查询效率高。 计算机随机访问数组中的某个元素时,通过下面的寻址公式计算元素存储的的内存地址;若下标以1开始,则要进行一次(i -1)操作。 数组的查找操作时间复杂度并不是O(1)。即便是排好的数组,用二分查找,时间复杂度也是O(logn)。 正确表述:数组支持随机 阅读全文
posted @ 2018-10-22 15:12 小小忧愁米粒大 阅读(335) 评论(0) 推荐(0) 编辑
摘要:一、复杂度分析的4个概念 二、为什么要引入这4个概念? 三、如何分析平均、均摊时间复杂度? 1.平均时间复杂度 代码在不同情况下复杂度出现量级差别,则用代码所有可能情况下执行次数的加权平均值表示。 2.均摊时间复杂度 两个条件满足时使用: 1)代码在绝大多数情况下是低级别复杂度,只有极少数情况是高级 阅读全文
posted @ 2018-10-22 13:45 小小忧愁米粒大 阅读(378) 评论(0) 推荐(0) 编辑
摘要:一、什么是复杂度分析? 二、为什么要进行复杂度分析? 2.1 事后统计法 2.2.1 概念 通过运行代码跑,统计、监控,得到算法执行的时间和占用的内存大小。 2.2.2 劣势 2.2 复杂度分析 三、如何进行复杂度分析? 3.1.大O表示法 1)来源 算法的执行时间与每行代码的执行次数成正比,用T( 阅读全文
posted @ 2018-10-22 13:07 小小忧愁米粒大 阅读(470) 评论(0) 推荐(1) 编辑
摘要:此系列文章内容全部来自:极客时间 王铮老师的数据结构与算法之美以及留言部分 1. 基本概念 数据结构:一组数据的存储结构。 算法:操作数据的一组方法。 数据结构为算法服务,算法要作用于特定的数据结构上。 2. 复杂度分析 3. 数据结构 4. 算法 阅读全文
posted @ 2018-10-22 10:41 小小忧愁米粒大 阅读(144) 评论(0) 推荐(0) 编辑

瞅啥瞅,好好看书