
数据结构与算法
文章平均质量分 88
土味儿~
这个作者很懒,什么都没留下…
展开
-
哈夫曼树、哈夫曼编码与压缩比
1、哈夫曼树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度构造哈夫曼树2、哈夫曼编码3、压缩比案例分析:已知某文档包含5个字符。每个字符出现的频率如下表所示。采用霍夫曼编码对该文档压缩存储,则单词“cade”的编码为( (1) ),文档的原创 2021-10-25 20:15:36 · 25744 阅读 · 6 评论 -
矩阵乘法 系数矩阵
矩阵乘法满足结合率、分配率,但不满足交换率矩阵 Am*n有 m 行,n 列矩阵 Bn*s有 n 行,s 列B 的行数与 A 的列数相等,这是矩阵可以相乘的前提B 的列数可以任意相乘的积矩阵 Cm*s积C的行数 = A 的行数 m积C的列数 = B 的列数 sC[ i,j ] 的值等于 A 中第 i 行的值,分别与 B 中第 j 列的值相乘,再相加如下图:C[2,3] = A[2,1] * B[1,3] + A[2,2] * B[2,3]系数矩阵原创 2021-10-21 18:50:06 · 2960 阅读 · 0 评论 -
简单区分 五大算法分析策略(分治、动态规划、贪心、回溯、分支限界)
一、分治法1、设计思想将一个难以直接解决的大问题,分割成k个规模较小的子问题,这些子问题相互独立,且与原问题相同,然后各个击破,分而治之。2、递归算法分治法常常与递归结合使用:通过反复应用分治,可以使子问题与原问题类型一致而规模不断缩小,最终使子问题缩小到很容易求出其解,由此自然导致递归算法。3、子问题规模根据分治法的分割原则,应把原问题分割成多少个子问题才比较适宜?每个子问题是否规模相同或怎样才为适当?这些问题很难给与肯定的回答。但人们从大量实践中发现,在使用分治法时,最好均匀划分,且在很多问原创 2021-10-20 18:07:17 · 3269 阅读 · 0 评论 -
【数据结构与算法】第十九、二十章:加权有向图、最短路径(松弛技术、Dijkstra算法)
19、加权有向图19.1、边的表示API代码package chapter19;/** * @author 土味儿 * Date 2021/9/17 * @version 1.0 * 有向边 */public class DirectedEdge { /** * 起点 */ private final int v; /** * 终点 */ private final int w; /**原创 2021-09-18 23:53:28 · 395 阅读 · 0 评论 -
【数据结构与算法】第十七、十八章:加权无向图、最小生成树(切分定理、贪心算法、Prim算法、kruskal算法)
17、加权无向图加权无向图是一种为每条边关联一个权重值或是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权值则可以表示距离或是费用。在一副电路图中,边表示导线,权值则可能表示导线的长度即成本,或是信号通过这条线所需的时间。此时很容易就能想到,最小成本的问题,例如,从西安飞纽约,怎样飞才能使时间成本最低或者是金钱成本最低?在下图中,从顶点0到顶点4有三条路径,分别为0-2-3-4,0-2-4,0-5-3-4,通过哪条路径到达4顶点最好呢?此时就要考虑,那条路径的成本最原创 2021-09-18 23:47:06 · 631 阅读 · 0 评论 -
【数据结构与算法】第十五、十六章:有向图、拓扑排序(检测环、顶点排序)
15、有向图15.1、有向图的定义及相关术语定义:有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的边都连着一对有序的顶点出度由某个顶点指出的边的个数称为该顶点的出度入度指向某个顶点的边的个数称为该顶点的入度有向路径由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点有向环一条至少含有一条边,且起点和终点相同的有向路径一副有向图中两个顶点v和w可能存在以下四种关系:没有边相连存在从v原创 2021-09-18 23:36:15 · 424 阅读 · 0 评论 -
【数据结构与算法】第十四章:图的概述、无向图(邻接矩阵、邻接表、深度/广度优先搜索、路径查找)
14.1、图的实际应用在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景都可以用即将要学习的图这种数据结构去解决。地图生活中经常使用的地图,基本上是由城市以及连接城市的道路组成,如果把城市看做是一个一个的点,把道路看做是一条一条的连接,那么地图就是将要学习的图这种数据结构电路图生活中经常见到的集成电路板,它其实就是由一个一个触点组成,并把触点与触点之间通过线进行连接,这也是即将要学习的图这种数据结构的应用场景14.2、图的定义及分类定义原创 2021-09-18 23:27:15 · 939 阅读 · 0 评论 -
【数据结构与算法】第十三章:并查集(并查集结构、API设计、代码实现、算法优化、性能分析、路径压缩)
并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作:**查询 **元素p和元素q是否属于同一组合并 元素p和元素q所在的组13.1、并查集结构并查集也是一种树型结构,但这棵树跟二叉树、红黑树、B树等都不一样,这种树的要求比较简单:每个元素都 唯一 的对应一个结点每一组数据中的多个元素都在 同一颗树 中一个组中的数据对应的树和另外一个组中的数据对应的 树之间没有任何联系元素在树中并 没有子父级关系 的硬性要求13.2、并查集API设计13.3、并查集实.原创 2021-09-18 23:16:12 · 295 阅读 · 0 评论 -
【数据结构与算法】第十、十一、十二章:平衡树(2-3查找树、红黑树)B树、B+树
10、平衡树之前的二叉查找树,查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但在最坏情况下,二叉查找树的性能还是很糟糕例如:依次往二叉查找树中插入9,8,7,6,5,4,3,2,1这9个数据,那么最终构造出来的树是长得下面这个样子:如果要查找1这个元素,查找的效率依旧会很低。效率低的原因在于这个树并不平衡,全部是向左边分支,如果有一种方法,能够不受插入数据的影响,让生成的树都像完全二叉树那样,那么即使在最坏情况下,查找的效率依旧会很好10.1、2-3查找树为原创 2021-09-18 23:06:16 · 212 阅读 · 0 评论 -
【数据结构与算法】第九章:优先队列(最大、最小、索引)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,可能需要找出队列中的最大值或者最小值例如:使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,就可以使用一种特殊的队列来完成这种需求,优先队列优先队列按照其作用不同,可以分为以下两种:最大优先队列: .原创 2021-09-18 22:42:10 · 1316 阅读 · 0 评论 -
【数据结构与算法】第八章:堆(最大堆、最小堆、堆排序、性能测试)
8.1、定义堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵 完全二叉树 的 数组对象堆的特性是 完全二叉树除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的, 那么要求 左满右不满通常用 数组 来实现具体方法就是将二叉树的结点按照 层级顺序 放入数组中, 根结点在 位置1,它的子结点在位置2和3,而子结点的子结点则分别在位置4,5,6和7,以此类推如果一个结点的位置为 k,则它的父结点的位置为 k/2原创 2021-09-18 22:33:34 · 698 阅读 · 0 评论 -
【数据结构与算法】第七章:二叉树(前序、中序、后序、层序遍历,最大深度)
树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构等等树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下特点:每个结点有 零个或多个 子结点没有父结点的结点为 根结点每一个非根结点 只有一个 父结点每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个 子树7.1、树的相关术语结点.原创 2021-09-18 22:23:53 · 397 阅读 · 0 评论 -
【数据结构与算法】第五、六章:线性表(顺序表、链表、栈、队列)符号表
5、线性表线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列前驱元素: 若A元素在B元素的前面,则称A为B的前驱元素后继元素: 若B元素在A元素的后面,则称B为A的后继元素线性表的特征:数据元素之间具有一种“一对一”的逻辑关系。第一个数据元素没有前驱,这个数据元素被称为头结点最后一个数据元素没有后继,这个数据元素被称为尾结点除了第一个和最后一个数据元素外,其他数据元素有且仅有一个前驱和一个后继如果把线性表用数学语言来定义,则原创 2021-09-18 22:08:34 · 384 阅读 · 0 评论 -
【数据结构与算法】第四章:高级排序
文章目录4.1、希尔排序4.2、归并排序1)递归2)归并排序4.3、快速排序4.4、排序的稳定性基础排序:冒泡排序、选择排序、插入排序,在最坏情况下的时间复杂度都是O(N^2),平方阶,随着输入规模的增大,时间成本将急剧上升,所以这些基本排序方法不能处理更大规模的问题4.1、希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本案例:需求: 排序前:{9,1,2,5,7,4,8,6,3,5} 排序后:{1,2,3,4,5,5,6,7,8,9原创 2021-09-15 07:25:17 · 227 阅读 · 0 评论 -
【数据结构与算法】第三章:简单排序
文章目录3.1、Comparable接口介绍3.2、冒泡排序3.3、选择排序3.4、插入排序3.1、Comparable接口介绍Java提供了一个接口Comparable,就是用来定义排序规则的案例:定义一个学生类Student,有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试public class原创 2021-09-15 07:12:34 · 139 阅读 · 0 评论 -
【数据结构与算法】第二章:算法分析
文章目录2.1、算法的时间复杂度分析1)函数渐近增长2)算法时间复杂度1、大O记法2、常见的大O阶2.1、线性阶 O(n)2.2、平方阶 O(n^2)2.3、立方阶 O(n^3)2.4、对数阶 O(logn)2.5、常数阶 O(1)2.6、常见时间复杂度总结3)函数调用的时间复杂度分析4)最坏情况2.2、算法的空间复杂度分析1)java中常见内存占用2)算法的空间复杂度2.1、算法的时间复杂度分析1)函数渐近增长概念: 给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有原创 2021-09-15 07:05:53 · 446 阅读 · 0 评论 -
【数据结构与算法】第一章:概述
本系列课程参考于:https://www.bilibili.com/video/BV1Cz411B7qd文章目录1.1、什么是数据结构?1.2、数据结构分类1)逻辑结构分类2)物理结构分类1.3、算法1.4、算法初体验1.1、什么是数据结构?官方解释数据结构是一门研究非数值计算的程序设计问题中的操作对象, 以及他们之间的关系和操作等相关问题的学科大白话数据结构就是把数据元素按照一定的关系组织起来的集合, 用来组织和存储数据1.2、数据结构分类传统上,我们可以把数据结构分为 .原创 2021-09-15 06:57:48 · 235 阅读 · 0 评论 -
【手撕红黑树 | 史上最详细注解】增删查改 原理剖析 代码实现
1、基本特征红黑树起源于2-3-4树(或2-3树),底层是二叉查找树,除二叉树的特性外,还有5大特性:根是黑色节点是黑色或红色叶子节点都是黑色叶子节点为NIL节点,不可忽略,见下图每个红色节点的两个子节点必须是黑色从每个叶子到根的路径上不能有两个连续的红节点黑色平衡从任一节点到其所有叶子节点的简单路径上黑色节点数量相同)]2、内部节点类Node双向链表:父 > 子 子 > 父 /** * 内部节点原创 2021-09-14 18:22:21 · 268 阅读 · 0 评论