算法与数据结构
文章平均质量分 88
算法与数据结构
baboon_chen
My piano is the keyboard
展开
-
红黑树的删除
好了,到这红黑树的删除总算讲完了,不知道你有没有睡着。重点是,红黑树的删除 = 删除 + 维护,无论怎样删除结点,都会动态的调整树高。原创 2023-12-29 17:02:50 · 903 阅读 · 0 评论 -
红黑树的插入
当你熟悉了上面五种场景后,无论红黑树已经有多大,无论新节点从哪个位置插入,都能按合适的方式调整整个树的高度,就才是插入算法的精妙所在!原创 2023-12-26 10:40:46 · 993 阅读 · 0 评论 -
红黑树的旋转、变色
旋转是以一个父节点作为参照物的。旋转分为左旋转与右旋转,其对应的结果就是将左子节点(后称左节点)或右子节点(后称右节点)替换原来的父节点,具体操作如下。右旋转使左节点成为新的父节点。原来的父节点,成为新的右节点。先前左节点的右子树,变成新右节点的左子树。左旋转使右节点成为新的父节点。原来的父节点,成为新的左节点。先前右节点的左子树,变成新左节点的右子树。原创 2023-12-25 10:54:08 · 367 阅读 · 0 评论 -
哈希表、哈希冲突解决办法
我们知道,普通数组能够直接寻址,在O(1)时间内能访问到数组中的任意位置。它需要足够大的空间,为每一个关键字保留一个位置。当关键字取值的范围很大,储存空间又有限时,能不能同样用数组的形式实现O(1)查找?哈希表(Hash Table)就是这样的数据结构,当实际储存的关键字集合,比所有可能的关键字的全集小许多时,使用一个长度有限的数组去储存这些关键字,从而节省大量的空闲空间。它也被称作为散列表,因为它的键是分散存储在数组中的。如图,黄色区域为键的全集,范围为0~99,绿色区域为实际存储的键。原创 2023-11-27 13:09:31 · 429 阅读 · 0 评论 -
Prim、Kruskal
文章目录一、什么是最小生成树?1、生成树2、最小生成树二、最小生成树求解算法1、Prim2、Kruskal一、什么是最小生成树?1、生成树对于有n个顶点的连通图,至少有n-1条边,那么连接所有顶点的极小连通子图就是生成树。如果在图的生成树中任意加一条边,则必然形成回路。 2、最小生成树对于连通网来说,边是带权值的,生成树的各边也带权值,因此把生成树各边的权值总和称为生成树的权,把权值最小的生成树称为最小生成树。 如图: 二、最小生成树求解算法1、Prim实现步骤将图的原创 2022-04-10 21:45:21 · 240 阅读 · 0 评论 -
图的遍历——BFS、DFS
文章目录一、深度优先搜索(Depth First Search,DFS)示例代码算法复杂度二、广度优先搜索(Breadth First Search,BFS)示例代码算法复杂度一、深度优先搜索(Depth First Search,DFS)该算法与二叉树的先序遍历类似,在第一次经过一个顶点时就进行访问操作,并记录该顶点已经被访问。具体步骤如下:设置指针p,指向顶点v。访问p所指的顶点,并使p指向与其相邻接的且未被访问过的顶点。如果p所指的顶点存在,则重复步骤(2),否则执行步骤(4)。沿着刚原创 2022-04-05 20:52:38 · 2630 阅读 · 0 评论 -
字串串匹配——KMP算法
文章目录KMPKMP匹配算法的思想示例代码计算字符串中子串出现的次数与位置KMPKMP是一种改进的模式匹配算法,它与朴素的模式匹配算法的区别在于:每当匹配过程中出现比较字符不相等时,不需要回退主串的字符位置指针,而是利用已经得到的部分匹配结果将模式串向右滑动尽可能远的距离,再继续进行比较。 KMP匹配算法的思想设模式串为p0 … pm-1,当模式串中的字符pj与主串中相应的字符Si不相等时,因其前j个字符p0 … pj-1已经获得了成功的匹配,若模式串的p0 … pk-1与pj-k … pj原创 2022-03-27 19:08:14 · 508 阅读 · 0 评论 -
红黑树的性质
结点是红色或黑色。根结点是黑色。每个叶子结点都是黑色的空结点(NULL LEAF)。从每个叶子到根的所有路径上不能有两个连续的红结点。(每个红色结点的两个子结点都是黑色)从任意结点到其每个叶子的所有路径都包含相同数目的黑色结点。原创 2020-11-01 20:02:23 · 604 阅读 · 0 评论 -
哈夫曼(huffman)树和哈夫曼编码
哈夫曼树也叫最优二叉树哈夫曼树例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80~89分: B,70~79分: C,60~69分: D,<60分: E。b = 'E';b = 'D';b = 'C';b = 'B';判别树:用于描述分类过程的二叉树。如果每次输入量都很大,那么应该考虑程序运行的时间。原创 2020-05-16 18:01:03 · 5170 阅读 · 1 评论 -
二叉树的遍历
一、用栈实现非递归方式中序遍历二叉树二、用队列实现按层遍历二叉树三、以树状形式打印二权树原创 2020-05-11 15:47:34 · 405 阅读 · 0 评论 -
go语言实现四则运算
go语言实现四则运算文章目录go语言实现四则运算一 将四则运算用中缀表达式表示二 前缀、后缀表达式求值1 前缀表达式求值2 后缀表达式求值三 中缀表达式转前、后缀表达式1 中缀表达式转前缀表达式2 后缀表达式转前缀表达式四 GO代码main.gostack.go 一 将四则运算用中缀表达式表示前缀表达式、中缀表达式、后缀表达式都是四则运算的表示方式。为了按照四则运算的运算顺序求值(比如乘...原创 2019-12-20 17:20:11 · 2723 阅读 · 4 评论 -
Dijkstra
一、算法过程二、算法实现#include <iostream>const int kNum = 100; // 最多顶点数量const int kMax = INT32_MAX; // int32最大值// 邻接矩阵typedef struct Graph { char vertex[kNum]; // 顶点集合...原创 2019-10-31 20:30:37 · 222 阅读 · 0 评论 -
拓扑排序
文章目录一 有向无环图二 顶点活动网三 拓扑排序四 拓扑排序的实现五 拓扑排序的高级应用 一 有向无环图 什么是有向无环图(directed acyclic graph,简写为DAG) ?下面就是一个有向无环图: 如上图所示:不存在任何一个从某个顶点发出,经过一条或者多条边后重新又回到了出发点的路径。我们称这样的图为有向无环图(directed acyclic graph...原创 2019-09-23 23:37:46 · 491 阅读 · 0 评论 -
关于异或
一、异或的基本性质交换律:A ^ B = B ^ A;结合律:A ^ (B ^ C) = (A ^ B) ^ C;恒等律:X ^ 0 = X;归零律:X ^ X = 0;自反:A ^ B ^ B = A ^ 0 = A; 对于任意的 X: X ^ (-1) = ~X; 如果 A ^ B = C 成立,那么 A ^ B = C,B ^ C = A; 二、异或的应用...原创 2019-08-26 13:36:31 · 1762 阅读 · 0 评论 -
递归的缺陷
递归的缺陷 递归虽然简洁,但是它也有显著的缺点。递归由于是函数调用自身,而函数调用是有时间和空间消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量,而且往栈中压入数据和弹出数据都需要时间。一、效率 递归中有可能很多计算都是重复的,从而对性能带来很大的影响。递归的本质是把一个问题分解成多个小问题。如果多个小问题存在相互重...原创 2019-03-20 09:59:26 · 1044 阅读 · 0 评论 -
排序算法
快排优点:快排总体的平均效率是最好的,缺点:当每轮排序都要比较n次的时候,快排效率只有O(n2)#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;random&amp;amp;amp;amp;a原创 2019-03-18 00:16:01 · 130 阅读 · 0 评论