Fork me on GitHub

随笔分类 -  数据结构与算法分析:C语言描述

摘要:动态规划的重要性就不多说,直接进入正题 首先,我们看一下官方定义: 定义: 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为 阅读全文
posted @ 2020-01-30 16:13 yooooooo 阅读(1116) 评论(0) 推荐(0) 编辑
摘要:关于首次适应算法、最佳适应算法和最差适应算法,先看一下百度百科的解释,已经说出了三者的最大区别。 首次适应算法(first fit): 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。 最佳适应算法(best fit):从全部空闲区中找出能满 阅读全文
posted @ 2020-01-30 15:17 yooooooo 阅读(10254) 评论(0) 推荐(0) 编辑
摘要:哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 哈夫曼编码,主 阅读全文
posted @ 2020-01-14 09:01 yooooooo 阅读(1045) 评论(1) 推荐(0) 编辑
摘要:贪婪算法 贪心算法(Greedy Algorithm) 简介贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。{看着这个名字,贪心,贪 阅读全文
posted @ 2020-01-11 17:18 yooooooo 阅读(1815) 评论(0) 推荐(0) 编辑
摘要:关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个 阅读全文
posted @ 2020-01-04 15:09 yooooooo 阅读(1065) 评论(0) 推荐(0) 编辑
摘要:网络流(network flows)是一种类比水流的解决问题方法,与线性规划密切相关。网络流的理论和应用在不断发展。而我们今天要讲的就是网络流里的一种常见问题——最大流问题。 最大流问题(maximum flow problem),一种组合最优化问题,就是要讨论如何充分利用装置的能力,使得运输的流量 阅读全文
posted @ 2020-01-02 16:45 yooooooo 阅读(572) 评论(0) 推荐(0) 编辑
摘要:定义 所谓最短路径问题是指:如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。 下面我们介绍两种比较常用的求最短路径算法: Dijkstra(迪杰斯特拉)算法 他的算法思想是按路径长度递增的次序一步一步并入来求取, 阅读全文
posted @ 2020-01-02 16:21 yooooooo 阅读(1043) 评论(0) 推荐(0) 编辑
摘要:在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。 一直做改操作,直到所有的节点都被分离出来。 如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。 阅读全文
posted @ 2019-12-27 09:18 yooooooo 阅读(400) 评论(0) 推荐(0) 编辑
摘要:首先,介绍一下有向无环图。 从字面上理解: 1. 为有向图 2. 无环 举例, 1. 有向的二叉树是特殊的有向无环图。 2. 如图(关键部分) 对于有向图来说,深度优先遍历下,若从head出发到结束时出现一条从head的下级节点mid开始指向head的一条路径,则必定此图有环。 拓扑排序 首先,拓扑 阅读全文
posted @ 2019-12-23 22:22 yooooooo 阅读(1016) 评论(0) 推荐(0) 编辑
摘要:理论部分 图的深度遍历和广度遍历都不算很难像极了二叉树的前序遍历和层序遍历,如下面的图,可以用右边的邻接矩阵进行表示,假设以顶点0开始对整幅图进行遍历的话,两种遍历方式的思想如下: 1. 深度优先遍历(depthFirstSearch—DFS) 由初始顶点开始,沿着一条道一直走,当走到走不动的时候, 阅读全文
posted @ 2019-11-10 14:13 yooooooo 阅读(1472) 评论(0) 推荐(0) 编辑
摘要:一 图的定义 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 在图中需要注意的是: (1)线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex) 阅读全文
posted @ 2019-11-10 11:00 yooooooo 阅读(1304) 评论(0) 推荐(1) 编辑
摘要:知乎上有一个问题是这样的: 堆排序是渐进最优的比较排序算法,达到了O(nlgn)这一下界,而快排有一定的可能性会产生最坏划分,时间复杂度可能为O(n^2),那为什么快排在实际使用中通常优于堆排序? 昨天刚好写了一篇关于快排优化的文章,今天再多做一个比较吧。首先先看一个排序算法图: 排序方法| 平均情 阅读全文
posted @ 2019-11-03 10:52 yooooooo 阅读(1200) 评论(0) 推荐(0) 编辑
摘要:原理: 快速排序,说白了就是给基准数据找其正确索引位置的过程. 如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾. 首先从后半部分开始,如果扫描到的值大于基准数 阅读全文
posted @ 2019-11-01 10:57 yooooooo 阅读(382) 评论(1) 推荐(1) 编辑
摘要:1. 归并排序 归并排序,是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子 阅读全文
posted @ 2019-10-31 17:34 yooooooo 阅读(369) 评论(0) 推荐(0) 编辑
摘要:排序 堆排序 一:定义 作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。 二:堆排序算法 作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。 堆排 阅读全文
posted @ 2019-10-29 22:20 yooooooo 阅读(1839) 评论(0) 推荐(0) 编辑
摘要:前情回顾:直接插入排序(对插入排序不熟悉的建议先阅读此文) 一天,一尘拿着扑克自己在那玩,刚被师傅看见了 首先它把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,插入排序所作用的数据量比较小(每一个小组),插入的效率比较高 可以看出,他是按下标相隔距离为4分的组 阅读全文
posted @ 2019-10-15 08:55 yooooooo 阅读(1022) 评论(0) 推荐(0) 编辑
摘要:接下来我来讲述一下插入排序法。 首先来解释一下插入排序法的原理,它的原理是每插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置。那么也就是说,每次插入一个数都要对原来排序好的那部分序列进行重新的排序,时间复杂度同样为O(n²)。 这种算法是稳定的排序方 阅读全文
posted @ 2019-10-14 13:42 yooooooo 阅读(659) 评论(0) 推荐(2) 编辑
摘要:本文在上述的基础上介绍优先队列的另外一种支持高效合并操作的实现——二项队列。原来在介绍二叉堆和左式堆的时候喜欢从结构性和堆序性两个方面介绍,它们二者都是特殊的二叉树结构,但是二项队列不能单纯的从结构性和堆序性两个方面介绍了因为二项队列并不是我们熟悉的树结构,而是树的集合——森林,本篇文章从二项队列的 阅读全文
posted @ 2019-10-12 14:28 yooooooo 阅读(616) 评论(0) 推荐(0) 编辑
摘要:一.O(logn)代码小证明 我们先来看下面一段代码: 2. 欧几里得算法 3.幂运算 四.log库里有log()函数和log2()函数 log()函数的底数默认为自然对数的底数e log2()函数的底数很显然就是2咯qwq include include include in 阅读全文
posted @ 2019-10-12 10:13 yooooooo 阅读(10871) 评论(0) 推荐(0) 编辑
摘要:这一次,我们来讲一讲二叉堆的另外一个应用:优先队列 队列的特点是什么? 聪明的小伙伴们都知道,是先进先出(FIFO)。 入队列: 出队列: 那么,优先队列又是什么样子呢? 优先队列不再遵循先入先出的原则,而是分为两种情况: 最大优先队列,无论入队顺序,当前最大的元素优先出队。 最小优先队列,无论入队 阅读全文
posted @ 2019-10-12 09:50 yooooooo 阅读(1197) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示