数据结构与算法
文章平均质量分 79
记录算法学习路上的点点滴滴。
JungleiRim
Stay hungry stay foolish.
展开
-
哈夫曼树(定义,构造,哈夫曼编码)
在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。原创 2023-11-13 08:28:41 · 299 阅读 · 0 评论 -
数据结构:并查集(概念,代码实现,并查操作优化)
a(n)是一个增长很缓慢的函数,对于常见的n值,通常α(n)原创 2023-11-13 08:29:17 · 229 阅读 · 0 评论 -
数据结构:树的存储结构(孩子兄弟表示法,树和森林的遍历)
②若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队。③先序遍历除去第一棵树之后剩余的树构成的森林。③中序遍历除去第一棵树之后剩余的树构成的森林。若树非空,先访问根结点,再依次对每棵子树进行。①中序遍历森林中第一棵树的根结点的子树森林。森林是m (m≥0)棵互不相交的树的集合。②先序遍历第一棵树中根结点的子树森林。,每个结点中保存指向双亲的“指针”。树的先根遍历序列与这棵树相应二叉树的。树的后根遍历序列与这棵树相应二叉树的。”,各个树的根节点视为兄弟关系。①访问森林中第一棵树的根结点。原创 2023-11-12 20:15:21 · 968 阅读 · 0 评论 -
线索二叉树(存储结构,线索化,寻找前驱/后继)
若左指针没有被线索化,先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱。若右指针没有被线索化:后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继。为了解决普通二叉树遍历,寻找前驱或者后继不方便的问题,引入了线索二叉树。,p的前驱为左兄弟子树中最后一个被先序遍历的结点。,p的后继为右兄弟子树中第一个被后序遍历的结点。后序线索二叉树――线索指向后序前驱、后序后继。先序线索二叉树――线索指向先序前驱、先序后继.②若结点p没有左孩子,则先序后继为右孩子。②若p没有右孩子,则后序前驱为左孩子。原创 2023-11-12 13:18:10 · 1241 阅读 · 0 评论 -
二叉树的遍历(先序,中序,后序,层序)
结论:若只给出一棵二叉树的前/中/后/层序遍历序列中的一种,不能唯一确定一棵二叉树。③若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入队尾(如果有的话)Key:找到树的根节点,并根据中序序列划分左右子树,再找到左右子树根节点。结论:前序、后序、层序序列的两两组合无法唯一确定一棵二叉树,必须加入。若二叉树为空,则什么也不做;依次从左到右,从上到下遍历。④重复③直至队列为空。原创 2023-11-12 13:17:45 · 197 阅读 · 0 评论 -
数据结构:树的基本概念(二叉树,定义性质,存储结构)
当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。最坏情况:高度为h 且只有h个结点的单支树(所有结点只有右孩子),也至少需要。④i≤ [n/2]为分支结点,i>[n/2]为叶子结点(向下取整);③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1。③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1。树是n (n>=0)个结点的有限集合,n =0时,称为。②无序树――逻辑上看,树中结点的各子树从左至右是。②当n>1时,其余结点可分为m (m>0)个。原创 2023-11-11 20:20:21 · 703 阅读 · 0 评论 -
字符串的模式匹配(朴素模式匹配算法,KMP算法)
假设主串长度为n,模式串长度为m.朴素模式匹配算法︰将主串中所有长度为m的子串依次与模式串对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。最多对比n-m+1个子串。原创 2023-11-11 11:15:04 · 595 阅读 · 0 评论 -
数据结构:串(定义,基本操作,存储结构)
串,即字符串( String)是由零个或多个字符组成的有限序列。一般记为s = ‘a1a2……an’ (n ≥0)其中,S是串名,单引号括起来的字符序列是串的值;ai可以是字母、数字或其他字符;串中字符的个数n称为串的长度。n = 0时的串称为空串,用∅\emptyset∅表示。①子串:串中任意个连续的字符组成的子序列。②主串:包含子串的串。③字符在主串中的位置:字符在串中的序号。④子串在主串中的位置:子串的第一个字符在主串中的位置。原创 2023-11-09 23:18:06 · 336 阅读 · 0 评论 -
特殊矩阵的压缩存储(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)
压缩存储策略:只存储主对角线+下三角区(或主对角线+上三角区)除了主对角线和上三角区,其余的元素都相同。除了主对角线和下三角区,其余的元素都相同。M行N列的二维数组b[M][N]中,若按。M行N列的二维数组b[M][N]中,若按。各数组元素大小相同,且物理上连续存放。②若已知数组下标k,如何得到i,j?:非零元素远远少于矩阵元素的个数。则b[i][i]的存储地址=数组元素a[i]的存放地址=则b[i][j]的存储地址=,会失去随机存储的特性。上三角区和主对角线元素。下三角区和主对角线元素。原创 2023-11-09 21:12:19 · 2698 阅读 · 0 评论 -
栈的应用:括号匹配,递归
③在操作系统中:多个进程争抢着使用有限的系统资源时,FCFS(First Come First Service,③匹配失败情况:左括号单身;①可用栈实现该特性:最后出现的左括号最先被匹配(每进入一层递归,就将递归调用所需信息压入栈顶。适合用“递归”算法解决:可以把原始问题转换为。可以自定义栈将递归算法改造成非递归算法。每退出一层递归,就从栈顶弹出相应信息。(计算阶乘,斐波拉契数列等)②出栈:每出现一个右括号,就“递归调用时,函数调用栈可称为“递归就是函数调用的过程。②可能包含很多重复计算。原创 2023-11-08 23:05:48 · 243 阅读 · 0 评论 -
栈的应用:表达式求值(中缀表达式,后缀表达式,前缀表达式)
遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。“右优先”原则:只要右边的运算符能先计算,就优先算右边的。若表达式合法,则最后栈中只会留下一个元素,就是最终结果。高于或等于当前运算符的所有运算符,并加入后缀表达式,”原则:只要左边的运算符能先计算,就优先算左边的。若碰到“(”或栈空则停止。),执行相应运算,运算结果压回栈顶,回到①。),执行相应运算,运算结果压回栈顶,回到①。③若扫描到运算符,则弹出两个栈顶元素(原创 2023-11-08 22:44:02 · 671 阅读 · 0 评论 -
队列(定义,基本操作,顺序存储,链式存储,双端队列)
队列( Queue)是只允许在一端进行插入,在另一端删除的线性表。特点:先进入队列的元素先出队。先进先出。原创 2023-11-07 23:22:07 · 256 阅读 · 0 评论 -
栈(定义,基本操作,顺序存储,链式存储)
栈( Stack)是只允许在一端进行插入或删除操作的线性表。一种受限的线性表,只能在栈顶进行插入删除。顺序栈的缺点:栈的大小不可变。原创 2023-11-07 22:26:26 · 139 阅读 · 0 评论 -
线性表(顺序表,单链表,双链表,循环链表,静态链表)
线性表是具有相同数据类型的n (n>=0)个数据元素的有限序列,其中n为表长,当n = 0时线性表是一个空表。若用L命名线性表,则其一般表示为La1a2aiai1anLa1a2...aiai1...an静态链表:分配一整片连续的内存空间,各个结点集中安置。静态链表:用数组的方式实现的链表。优点:增、删操作不需要大量移动元素缺点:不能随机存取,只能从头结点开始依次往后查找。容量固定不可变。适用场景:①不支持指针的低级语言;原创 2023-11-06 22:20:49 · 409 阅读 · 0 评论 -
数据结构:算法(特性,时间复杂度,空间复杂度)
输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。①若无论问题规模怎么变,算法运行所需的内存空间都是固定的常量,注:有的算法各层函数所需存储空间不同,分析方法略有区别。输出,这些输出是与输入有着某种特定关系的量。输入,这些输入取自于某个特定的对象的集合。多项相加,只保留最高阶的项,且系数变为1。算法必须是有穷的,而程序可以是无穷的。原创 2023-10-30 23:20:19 · 669 阅读 · 0 评论 -
数据结构:绪论(数据对象,逻辑结构,数据的运算,物理结构)
根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储。(自定义数据结构,采用封装的思想。,借助指示元素存储地址的指针来表示元素之间的逻辑关系。同一个数据对象里的数据元素,可以组成不同的数据结构。组成,数据项是构成数据元素的不可分割的最小单位。中,元素之间的关系由存储单元的邻接关系来体现。基本运算包括:查找元素,插入元素,删除元素…不同的数据元素,可组成相同的数据结构。,索引项的一般形式是(关键字,地址)。的数据元素的集合,是数据的一个子集。在存储元素信息的同时,还建立附加的。原创 2023-10-30 22:31:12 · 271 阅读 · 0 评论 -
排序:最佳归并树(优化外部排序中对磁盘的读写次数)
如下图:每个初始归并段看作一个叶子结点,归并段的长度作为结点权值,则上面这棵归并树的带权路径长度WPL= 2*1+(5+1+6+2)*3= 44 =读磁盘的次数=写磁盘的次数。重要结论:归并过程中的磁盘I/O次数=归并树的WPL*2。要让磁盘I/O次数最少,就要使归并树WPL最小:哈夫曼树。原创 2023-09-29 23:26:42 · 771 阅读 · 0 评论 -
排序:败者树和置换选择排序(解决外部排序中的优化问题)
败者树:可视为一棵完全二叉树(多了一个头头)。k个叶结点分别是当前参加比较的元素,非叶子结点用来记忆左右子树中的“失败者”,而让胜者往上继续进行比较,一直到根结点。原创 2023-09-29 22:56:40 · 411 阅读 · 0 评论 -
排序:外部排序算法分析
操作系统以“块”为单位对磁盘存储空间进行管理,如:每块大小1KB各个磁盘块内存放着各种各样的数据。原创 2023-09-29 21:56:05 · 309 阅读 · 0 评论 -
排序:基数排序算法分析
假设长度为n的线性表中每个结点aj的关键字由d元组kjd−1kjd−2kjd−3...kj1kj0组成,其中,0原创 2023-09-29 21:08:18 · 288 阅读 · 0 评论 -
排序:归并(Merge)排序算法分析
归并:把两个或多个已经有序的序列合并成一个。原创 2023-09-29 09:34:40 · 729 阅读 · 0 评论 -
排序:堆排序算法分析以及插入删除操作
若n个关键字序列L1...nL[ 1...n]L1...n满足下面某一条性质,则称为堆若满足∶Li≥L2i且Li≥L2i11≤i≤n2L(i)≥L(2i)且L(i)≥L(2i+1) (1 ≤i ≤n/2 )Li≥L2i且Li≥L2i11≤i≤n/2大根堆(大顶堆)Li≤L2i且Li≤L2i11≤i≤n2。原创 2023-09-28 22:31:25 · 1055 阅读 · 0 评论 -
排序:简单选择排序算法分析
选择排序包括简单选择排序以及堆排序。原创 2023-09-28 20:20:45 · 145 阅读 · 0 评论 -
排序:快速排序算法分析
基于“交换”的排序︰根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。快速排序属于交换排序的大类。原创 2023-09-27 22:19:25 · 316 阅读 · 0 评论 -
排序:冒泡排序算法分析
基于“交换”的排序︰根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。交换排序包括和。原创 2023-09-24 23:01:37 · 658 阅读 · 1 评论 -
排序:希尔排序(Shell Sort)算法分析
希尔排序:先追求表中元素部分有序再逐渐逼近全局有序.希尔排序∶先将待排序表分割成若干形如Liidi2d....ikd的“特殊”子表,对各个子表分别进行直接插入排序。缩小,重复上述过程,直到d=1为止。希尔本人建议:每次将增量缩小一半。分析每一趟排序后的状态。原创 2023-09-24 21:40:59 · 188 阅读 · 0 评论 -
排序:插入排序算法分析以及相关优化(折半插入排序)
每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。:顺序查找找到插入的位置,适用于顺序表、链表。原创 2023-09-24 20:36:43 · 213 阅读 · 0 评论 -
排序的基本概念
排序(Sort),就是重新排列表中的元素,使表中元素满足按关键字有序的过程。原创 2023-09-21 21:52:02 · 69 阅读 · 0 评论 -
散列(哈希)查找的定义,常见的散列函数设计以及处理哈希冲突方法
(Hash Table),又称。是一种数据结构,特点是:数据元素的。原创 2023-09-21 20:34:18 · 953 阅读 · 0 评论 -
B+树的定义以及查找
一棵要追求“绝对平衡”,即所有子树高度要相同。例如:一颗4阶B+树。原创 2023-09-21 11:33:15 · 632 阅读 · 1 评论 -
B树的插入和删除
m/2−1≤n≤m−1新元素一定是插入到最底层“终端节点”,用“查找”来确定插入位置.原创 2023-09-21 10:43:13 · 575 阅读 · 0 评论 -
B树的定义和特点
B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。原创 2023-09-19 22:49:47 · 271 阅读 · 1 评论 -
红黑树的定义和性质以及插入、删除操作
红黑树是二叉排序树:左子树结点值≤根结点值≤右子树结点值。原创 2023-09-19 10:36:56 · 122 阅读 · 0 评论 -
平衡二叉树删除结点后的调整操作
4 . 根据其树高最大的孙子结点的位置,调整平衡二叉树:(LL,RR,LR,RL四种情况)5 . 如果调整后不平衡,则继续向上调整(进行第二步),直到二叉树平衡。3 . 若找到了最小平衡二叉树,找到高度最大的儿子结点和孙子结点。2 . 从叶子结点一路向上找“最小不平衡子树”平衡二叉树删除操作时间复杂度为。原创 2023-09-18 21:19:19 · 1058 阅读 · 0 评论 -
平衡二叉树的定义,插入操作以及插入新结点后的调整规则(ALV树)
平衡二叉树( Balanced Binary Tree),简称平衡树(AVL树)。原创 2023-09-17 23:35:52 · 439 阅读 · 0 评论 -
二叉排序树(BST)的算法分析以及基本操作(结点的查询,插入,删除)
二叉排序树,又称二叉查找树(BST,Binary Search Tree)默认不允许两个结点的关键字相同。原创 2023-09-13 11:46:43 · 1078 阅读 · 0 评论 -
查找:分块查找算法分析
数据分块存储,分块查找特点:块内无序、块间有序。原创 2023-09-12 23:38:05 · 499 阅读 · 0 评论 -
折半查找(二分查找)
折半查找,又称“二分查找”,仅适用于有序的顺序表。原创 2023-09-11 20:54:26 · 245 阅读 · 0 评论 -
查找:顺序查找的实现以及相关优化
顺序查找,又叫“线性查找”,通常用于线性表。适用于顺序表、链表,表中元素有序无序都OK。可在0索引处存“哨兵”,从尾部向头部挨个查找优点:循环时无需判断下标是否越界。原创 2023-09-10 22:28:50 · 439 阅读 · 0 评论 -
查找:基本概念
在数据集合中寻找满足某种条件的数据元素的过程称为查找。原创 2023-09-10 19:31:49 · 116 阅读 · 0 评论