一、二叉搜索树

1.1、二叉搜索树概念
二叉搜索树又称二叉排序树,它或者是一颗空树,或者是一颗具有以下性质的二叉树:
(1) 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。
(2) 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。
(3) 它的左右子树也分别为二叉搜索树。
在这里插入图片描述
1.2、二叉搜索树的操作
(1) 二叉搜索树的查找
在这里插入图片描述
(2) 二叉搜索树的插入
插入的具体过程如下:
a. 数为空,则直接插入
在这里插入图片描述
b. 数不为空,按二叉搜索树性质查找插入位置,插入新节点
在这里插入图片描述
(3) 二叉搜索树的删除
首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情况:
a. 要删除的结点无孩子结点
b. 要删除的结点只有左孩子结点
c. 要删除的结点只有右孩子结点
d. 要删除的结点有左、右孩子结点
看起来有待删除节点有4中情况,实际情况a可以与情况b或者c合并起来,因此真正的删除过程如下:
情况b: 删除该结点且使被删除节点的双亲结点(其实就是父节点,只是一个节点)指向被删除节点的左孩子结点。
情况c: 删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点。
情况d: 在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点中,再来处理该结点的删除问题。
1.3、二叉搜索树的性能
插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能。
对有n个结点的二叉搜索树,二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。
对于同一个关键码集合,如果各关键码插入的次序不同,可能得到不同结构的二叉搜索树:
在这里插入图片描述

二叉搜索树代码:https://github.com/xiao-hao-hao/learning-C/blob/master/C%2B%2B/STL/bst_avl/bst_avl/test.cpp

二、AVL树

2.1、AVL树的概念
二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树(两者都满足):
(1) 它的左右子树都是AVL树;
(2) 左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)。
在这里插入图片描述
2.2、AVL树的旋转
如果在一棵原本是平衡的AVL树中插入一个新节点,可能造成不平衡,此时必须调整树的结构,使之平衡化。

AVL树的插入
在向一颗本来是高度平衡的AVL树中插入一个新节点时,如果树中的某个节点的平衡因子的绝对值|bf|>1,则出现了不平衡,需要做平衡化处理。
设新插入的节点为p,从节点p到根节点的路径上,每个节点为根的子树的高度都可能增加1,因此在每执行一次二叉搜索树的插入运算后,都需要从新插入的节点p开始,沿该节点的插入路径向根节点方向回溯,修改各节点的平衡因子,调整子树的高度,恢复被破坏的平衡性质。
新节点p的平衡因子为0。现在考察它的父节点pr,若p是pr的右子女,则pr的平衡因子增加1,否则pr的平衡因子减少1,按照修改后pr的平衡因子值有三种情况:
1、节点pr的平衡因子为0,说明刚才是在pr的较矮的子树上插入了新节点,节点pr处平衡,且高度没有增减,此时从pr到根的路径上各节点为根的子树高度不变,从而各个节点的平衡因子不变,可以结束重新平衡化的处理,返回主程序。
2、节点pr的平衡因子绝对值bf=1,说明插入前pr的平衡因子是0,插入新节点后,以pr为根的子树没有失去平衡,不需要平衡化旋转,但该子树的高度增加,还需从节点pr向根的方向回溯,继续考察节点pr的父节点的平衡状态。
3、节点pr的平衡因子的绝对值bf=2,说明新节点在较高的子树上插入,造成了不平衡,需要做平衡化旋转,分两种情况考虑:
3.1 若节点pr的bf=2,说明右子树高,结合其右子女q的bf分别处理:
1、若q的bf=1,执行左单旋转;
2、若q的bf=-1, 执行先右后左双旋转 >
3.2 若节点pr的bf=-2,说明左子树高,结合其左子女q的bf分别处理:
1、若q的bf=-1,执行右单旋转; /
2、若q的bf= 1, 执行先左后右双旋转 <

AVL树的删除
若删除节点后破坏了AVL树的平衡,则需要进行平衡旋转。
1和2与bst树的删除过程一样。
1、如果被删除节点p有两个子女节点,首先搜索p在中序下的直接前驱q(也可以是直接后继,也就是左树的最大值或右树的最小值),再把节点q的内容传送给节点p,问题转移到删除节点q,把节点q当做被删除节点p,它没有子女节点。
2、如果被删除节点p最多只有一个子女q,可以简单的把p的父节点pr中原来指向p的指针指到q,如果节点p没有子女,p的父节点pr的相应指针为NULL。
考察节点q的父节点pr,若q是pr的左子女,则pr的平衡因子增加1,否则减少1,根据修改后的pr的平衡因子,按三种情况分别进行处理:
(1)pr的平衡因子原来为0,在它的左子树或右子树被缩短后,则它的平衡因子改为1或-1,由于以pr为根的子树高度没有改变,从pr到根节点的路径上所有节点都不需要调整,此时可结束本次删除的重新平衡过程。
(2)节点pr的平衡因子原不为0,且较高的子树被缩短,则pr的平衡因子改为0,此时pr为根的子树平衡,但其高度减1,为此需要继续考察节点pr的父节点的平衡状态。
(3)节点pr的平衡因子原不为0,且较矮的子树被缩短,则在节点pr发生不平衡,为此需要进行平衡化的旋转来恢复平衡,令pr的较高的子树的根为q(该子树是未被缩短的子树),根据q的平衡因子,有3中平衡化操作:
1、如果q的平衡因子为0,执行一个单旋转来恢复节点pr的平衡(因为一个单旋转就可以把引起不平衡的两个结点的影响全部消除,双旋转会引起新的树不平衡),pr平衡因子变成-1,q平衡因子变成1,由于平衡旋转后以q为根的子树的高度没有发生改变,从q到跟的路径上所有结点的平衡因子不变,此时可以结束重新平衡过程。
2、如果q的平衡因子与pr的平衡因子正负号相同,则执行一个单旋转来恢复平衡,节点pr和q的平衡因子均改为0,由于经过平衡旋转后节点q的子树高度降低1,故需要继续延插入路径上考查节点q的父节点的平衡状态,即将当前考查节点向跟节点方向上移。
3、如果pr与q的平衡因子正负号相反,则执行一个双旋转来恢复平衡(必须用双旋转才能消除结点引起的不平衡影响)。新的根节点的平衡因子置为0,其他节点的平衡因子相应处理,同时由于经过平衡化处理后子树的高度降低1,还需要考查它的父节点,继续向上层进行平衡化工作。

2.3、AVL树的性能
AVL树是一棵绝对平衡的二叉搜索树,其要求每个节点的左右子树高度差的绝对值都不超过1,这样可以保证查询时高效的时间复杂度,即log2(N) 。但是如果要对AVL树做一些结构修改的操作,性能非常低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。因此:如果需要一种查询高效且有序的数据结构,而且数据的个数为静态的(即不会改变),可以考虑AVL树,但一个结构经常修改,就不太适合。
AVL树代码:https://github.com/xiao-hao-hao/learning-C/blob/master/C%2B%2B/STL/AVL/AVL/test.cpp

三、红黑树

3.1、红黑树的概念
红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。
红黑树的性质:一头一脚黑,黑同红不连:
1、每个节点不是红色就是黑色;
2、根节点和叶子节点都是黑的;
3、对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点;
4、两个红色节点不能直接相连;
5、每个叶子结点都是黑色的(此处的叶子结点指的是空结点)。
红黑树其最长路径中节点个数不会超过最短路径节点个数的两倍。 因为最长路径和最短路径黑色节点相同,但是即使最短路径没有红节点,最长路径红节点达到最大数量,则最长路径上的红节点也比起黑节点少一个,所以最长路径中节点个数不会超过最短路径节点个数的两倍。
在节点的定义中,为什么要将节点的默认颜色给成红色的。 如果节点默认给成黑色,那么每次插入都会改变(增加)插入路径中黑色节点的个数,也就是说每次插入节点都需要我们对红黑树进行调整。如果默认节点是红色,那么插入新节点后如果父节点是黑色,我们不需要调整,否则才去调整数,所以默认红色可以减少调整的频率。
红黑树可能产生不平衡状态(高度相差1以上),这倒没关系,因为RBTree的平衡性本来就比AVLTree弱。然而RBTree通常能够导致良好的平衡状态,是的,经验告诉我们,RBTree的搜索平均效率和AVLTree几乎相等。
在这里插入图片描述
3.2、红黑树的旋转

红黑树树的插入
新插入的节点为X,X的父节点为P,P的父节点为G,P的兄弟节点为S,G的父节点为GG。我们新插入的节点X是红色,若P为黑色,则不用调整,若P为红色,则G必为黑色,根据X的插入位置及外围节点(S和GG)的颜色,有如下三种情况:
状况1:S为黑且X为外侧插入,对此情况,我们先对P、G做一次单旋转,再更改P、G颜色,即可重新满足红黑树的规则。
注意: 此时可能产生不平衡状态(高度相差1以上),这倒没关系,因为RBTree的平衡性本来就比AVLTree弱。然而RBTree通常能够导致良好的平衡状态,是的,经验告诉我们,RBTree的搜索平均效率和AVLTree几乎相等。
状况2:S为黑且X为内侧插入,对此情况,我们先对P、X做一次单旋转,并更改G、X颜色,再将结果对G做一次单旋转,即可再次满足红黑树规则。
状况3:S为红,对此情况,先改变P、G、S的颜色,此时如果GG为黑,一切搞定。如果GG为红,还得持续往上做,直到不再有父子连续为红的情况。

红黑树的删除
对可能出现的情形讨论:
删除红黑树中一个结点,删除的结点是其子结点状态和颜色的组合。子结点的状态有三种:无子结点、只有一个子结点、有两个子结点。颜色有红色和黑色两种。所以共会有6种组合。
组合1:被删结点无子结点,且被删结点为红色
此时直接将结点删除即可,不破坏任何红黑树的性质.
组合2:被删结点无子结点,且被删结点为黑色
处理方法略微复杂,稍后再议。
组合3:被删结点有一个子结点,且被删结点为红色
在这里插入图片描述
这种组合是不存在的,如图假如被删结点node只有一个有值的子结点value,而以value为根结点的子树中,必然还存在null结点,如此不符合红黑树的性质5,对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。
组合4:被删结点有一个子结点,且被删结点为黑色
在这里插入图片描述
这种组合下,被删结点node的另一个子结点value必然为红色,此时直接将node删掉,用value代替node的位置,并将value着黑即可。
组合5&6:被删结点有两个子结点,且被删结点为黑色或红色
当被删结点node有两个子结点时,先要找到这个被删结点的后继结点successor,然后用successor代替node的位置,此时相当于successor被删。
因为node有两个子结点,所以successor必然在node的右子树中,必然是下图两种形态中的一种。
在这里插入图片描述
若是(a)的情形,用successor代替node后,相当于successor被删,若successor为红色,则变成了组合1;若successor为黑色,则变成了组合2或4。
若是(b)的情形,用successor代替node后,相当于successor被删,若successor为红色,则变成了组合1;若successor为黑色,则变成了组合2或4。
综上: 若被删结点是组合1或组合4的状态,很容易处理;被删结点不可能是组合3的状态;被删结点是组合5&6的状态,将变成组合1或组合2或组合4。
再议组合2:被删结点无子结点,且被删结点为黑色
因为删除黑色结点会破坏红黑树的性质5,所以为了不破坏性质5,在替代结点上额外增加一个黑色,这样不违背性质5而只违背性质1,每个结点或是黑色或是红色。此时将额外的黑色移除,则完成删除操作。
在这里插入图片描述
然后再结合node原来的父结点father和其兄弟结点brother来分析。
情形一:
brother为黑色,且brother有一个与其方向一致的红色子结点son, 所谓方向一致,是指brother为father的左子结点,son也为brother的左子结点;或者brother为father的右子结点,son也为brother的右子结点。
在这里插入图片描述
图 ( c ) 中,白色代表随便是黑或是红,方形结点除了存储自身黑色外,还额外存储一个黑色。将brother和father旋转,并重新上色后,变成了图(d),方形结点额外存储的黑色转移到了father,且不违背任何红黑树的性质,删除操作完成。
图( c )中的情形颠倒过来,也是一样的操作。
情形二
brother为黑色,且brother有一个与其方向不一致的红色子结点son
在这里插入图片描述
图(e)中,将son和brother旋转,重新上色后,变成了图(f),情形一。
图(e)中的情形颠倒过来,也是一样的操作。
情形三
brother为黑色,且brother无红色子结点
此时若father为红,则重新着色即可,删除操作完成。如图下图(g)和(h)。
在这里插入图片描述
此时若father为黑,则重新着色,将额外的黑色存到father,将father作为新的结点进行情形判断(不删除),遇到情形一、情形二,则进行相应的调整,完成删除操作;如果没有,则结点一直上移,直到根结点存储额外的黑色,此时将该额外的黑色移除,即完成了删除操作。
在这里插入图片描述
情形四
brother为红色,则father必为黑色。
在这里插入图片描述

图(i)中,将brother和father旋转,重新上色后,变成了图(j),新的brother变成了黑色,这样就成了情形一、二、三中的一种。如果将son和brother旋转,无论怎么重新上色,都会破坏红黑树的性质4或5,例如图(k)。
图(i)中的情形颠倒过来,也是一样的操作。

四、树型结构的关联式容器(map、set、multimap、multiset)

    根据应用场景的不同,STL总共实现了两种不同结构的关联式容器:树形结构与哈希结构。树形结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用红黑树作为其底层结构,容器中的元素是一个有序的序列。
vector、list、deque、forward_list(C++11)等这些容器统称为序列式容器,因为其底层的数据结构为线性序列,里面存储的是元素本身。
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。
键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词和与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该英文单词,在词典中就可以找到与其对应的中文含义。
4.1、set
set是按照一定次序存储元素的容器,在set中,元素的value同时也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象所指示的特定排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代,set在底层是用红黑树实现的。
注意:
1. 与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对。
2. set中插入元素时,只需要插入value即可,不需要构造键值对。
3. set中的元素不可以重复,因此可以使用set进行去重。
4. 使用set的迭代器遍历set中的元素,可以得到有序序列
5. set中的元素默认按照小于来比较
6. set中查找某个元素,时间复杂度为log2(N)
7. set中的元素不允许修改,修改之后不满足二叉搜索树性质了,调整起来麻烦
8. set中的底层是红黑树

4.1、map
map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为pair : typedef pair value_type;。在内部,map中的元素总是按照键值key进行比较排序的。map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。map底层结构是红黑树。
map中的元素是键值对,map中的key是唯一的,并且不能修改,默认按照小于的方式对key进行比较。map中的元素如果用迭代器去遍历,可以得到一个有序的序列。map的底层为红黑树,查找效率比较高 O(log2(N))。map的[ ]实际是插入查找,如果没有找到会自动为其插入一个值T()。因为键值是唯一的,所以在插入时,如果该键值已经存在,则会插入失败(insert)。但是[ ]可以改一个键对应的键值。
4.2、multiset
multiset是按照特定顺序存储元素的容器,其中元素是可以重复的。在multiset中,元素的value也会识别它(因为multiset中本身存储的就是<value, value>组成的键值对,因此value本身就是key,key就是value,类型为T). multiset元素的值不能在容器中进行修改(因为元素总是const的),但可以从容器中插入或删除。在内部,multiset中的元素总是按照其内部比较规则所指示的特定排序准则进行排序。multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列。multiset底层结构为红黑树。
注意:
1. multiset中在底层中存储的是<value, value>的键值对
2. multiset的插入接口中只需要插入即可
3. 与set的区别是,multiset中的元素可以重复,set中value是唯一的
4. 使用迭代器对multiset中的元素进行遍历,可以得到有序的序列
5. multiset中的元素不能修改
6. 在multiset中找某个元素,时间复杂度为O(log2(N))
7. multiset的作用:可以对元素进行排序

4.3、multimap
multimap是关联式容器,它按照特定的顺序,存储由key和value映射成的键值对<key, value>,其中多个键值对之间的key是可以重复的。在multimap中,通常按照key排序和唯一地标识元素。key和value的类型可能不同,通过multimap内部的成员类型value_type组合在一起,value_type是组合key和value的键值对:typedef pair<const Key, T> value_type;。 在内部,multimap中的元素总是通过其内部比较对象,按照指定的特定排序标准对key进行排序的。 multimap通过key访问单个元素的速度通常比unordered_multimap容器慢,但是使用迭代器直接遍历multimap中的元素可以得到关于key有序的序列。multimap在底层用红黑树来实现
注意:
1. multimap中的key是可以重复的。
2. multimap中的元素默认将key按照小于来比较。
3. multimap中没有重载operator[]操作。
4. 使用时与map包含的头文件相同:

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JetBrain系列的工具(2018,2019,2020)

    使用步骤(先解压压缩包,看到两个文件,一个是压缩文件,另一个文件里面是破解码)0.链接下载安装包链接:https://pan.baidu.com/s/1Dio3InAe3ClTQ45z8bVWqg 提取码:2fru1.打开安装的开发工具2.把你解压得到的其中的一个压缩文件拖拉到你新建的main方法中(注意那个压缩文件…...

    2024/5/4 17:03:21
  2. C118+OSMCOMBB嗅探短信

    C118+OSMCOMBB嗅探短信此教程适用于有一定linux系统命令基础的玩家也可用封装好的U盘系统,可直接使用,无需安装!Uncomment this line if you want to enable Tx (Transmit) Support. 此教程适用于有一定linux系统命令基础的玩家 也可用封装好的U盘系统,可直接使用,无需安装…...

    2024/5/4 18:55:28
  3. 基于UDP的P2P穿透方法

    目标场景有两个分别处于不同内网的客户端(客户端1:10.168.1.103、客户端2:14.10.12.155)分别通过各自的NAT网关(NAT网关A:172.128.58.1、NAT网关B:172.168.56.2)进行转换以访问外网。我们的目的是希望实现客户端1和客户端2的P2P通信。 技术方法 译自论文 Autonomous NAT …...

    2024/5/10 5:33:45
  4. H.264及编解码调试

    H.264及编解码调试 H.264是国际标准化组织(ISO)和国际电信联盟(ITU)在2002年12月共同提出的继MPEG-4之后的新一代数字视频压缩格式,其具有更高的编码效率,并注重对移动和IP网络的适应,考虑信道的特点,能控制误码扩散。 本文将简单介绍H.264编码的原理,并使用JM 18.61进…...

    2024/5/10 7:14:39
  5. WebRTC:stun/turn服务器搭建

    基于coturn项目的stun/turn服务器搭建VoIP (Voice over Internet Protocol), 一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。 NAT (Network Address Translation) 网络地址转换。webrtc是google推出的基于浏览器的实时语音-…...

    2024/5/7 23:28:50
  6. 在Window7(32位)+Windows(2003 server Enterprise)安装Oracle EBS R12(2)-亲测成功运行

    2020年8月12日开始尝试在XP上安装EBS装机前准备:系统环境: Win 7 32 位硬盘:2T内存:4G,如果可以最好是加到8G,不然有点慢CPU:E6700@3.2G,古董机,一般都是可以!2,按照网络上的教程,下载了以下文件:EBS R12:EBS R12 Cygwin 专用安装包Visual.Studio.2005.Profession…...

    2024/5/7 4:04:10
  7. iOS进阶:【手势全埋点】(轻拍手势、长按手势、捏合手势、旋转手势、轻扫手势、平移手势、屏幕边缘平移手势)

    前言 手势识别器必须被添加在一个特定的视图上(比如UILabel、UIImageView等控件),这需要通过调用UIView类中的-addGestureRecognizer:方法进行添加。 手势识别器也使用了Target-Action设计模式。当我们为一个手势识别器添加一个或多个Target-Action后,在视图上进行触摸操作…...

    2024/5/5 6:40:58
  8. Jmeter基本使用

    Jmeter下载安装 Jdk环境变量配置链接: https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html jmeter官网连接: http://jmeter.apache.org/ 操作步骤: 1、下载jdk,配置环境变量 2、下载jemeter安装包 注:对应的jdk版本不可太低,一般jmeter3.0的对应jdk1.7,j…...

    2024/5/5 8:47:58
  9. python 互站网数据销量的获取

    互站网数据销量的获取,有需求老铁可以学习,废话不多说,直接上代码!特别申明以下代码,仅仅学习参考!不可用于商业化!sql语句 DROP TABLE IF EXISTS `cmf_huzhan`; CREATE TABLE `cmf_huzhan` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`price` varchar(255) NOT NULL DE…...

    2024/5/5 9:36:11
  10. Excel基本公式,Leo老师来教你

    在工作学习中,我们经常会遇到Excel基本公式这样的问题。鲁迅先生说过:伟大的成绩和辛勤劳动是成正比例的,有一分劳动就有一分收获,日积月累,从少到多,奇迹就可以创造出来因此,面对Excel基本公式我们应该有努力探索的精神。不吃饭、不睡觉,打起精神赚钞票!对于这个问题…...

    2024/5/9 16:11:31
  11. GSM采集改号改频教学

    GSM采集改号改频教学GSM改号原理及作用GSM改频点原理及作用 出此文章主要为了交流采集的Ubuntu系统操作 如有技术交流请联系 GSM改号原理及作用 GSM改号说白了就是把采集系统里面默认的回拨号码给成你自己的。 这样才可以实现采集回拨 GSM改频点原理及作用 GSM采集改频,这个很…...

    2024/5/8 7:17:47
  12. java实现导出复杂的word文档

    早几天来了个任务,要求将用户填写的数据导成word文档。主要是给过来的word模板过于复杂,模板数据页只有两页,但包含单选框、多选框,并且前面却有七八页的文字说明。这种情况不适用于直接使用poi操作属性,生成文档。百度一翻,发现使用freemark即可轻松实现。主要参考https…...

    2024/5/8 10:13:10
  13. 服务链接失败解决方案

    ...

    2024/5/7 21:54:02
  14. Java架构师面试网整理-JVM面试专题

    1、什么情况下会发生栈内存溢出? 答:如果线程请求分配的栈容量超过java虚拟机栈允许的最大容量的时候,java虚拟机将抛出一个StackOverFlowError异常2、你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。 答:Serial收集器、Parallel(并行)…...

    2024/5/5 13:36:28
  15. Vue(路由)4.动态路由

    vue-router 文章目录vue-router动态路由路由对象$router 对象$route 对象$route.params 动态路由 有的时候,我们需要把满足某种规则的路由全部匹配到同一个组件,比如不同的商品的 url /item/1 /item/2 /item/3 ...我们不可能为每一个商品都定义一个独立的组件,而是把它们都映…...

    2024/5/10 3:39:02
  16. sqlserver 给数据库相同字段的数据加上流水码,使数据唯一(内附数据位数不足补零)

    SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY f43 ORDER BY f43) > 0 THEN f43 + right(0000+convert(varchar(20),ROW_NUMBER() OVER(PARTITION BY f43 ORDER BY f43)),4) ELSE f43 END AS f43FROM spRIGHT(位数+CAST(要判断的字段 AS nvarchar(50)),位数 )...

    2024/5/4 6:48:11
  17. 【数据结构】第4章 串、数组和广义表 KMP算法

    嘿嘿嘿在B站找着俩视频动画理解和手算做题...

    2024/5/1 10:02:34
  18. javascript中数组的深拷贝的方法

    一、什么是浅拷贝在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如 var a=[1,2,3]; var b=a; console.log(b);  //输出的是1,2,3 a[2]=0; console.log(b);  //输出的是1,2,0 把数组a用等号“=”的形式复制给变量b,这种…...

    2024/5/6 23:42:50
  19. 懒执行与懒加载

    懒执行懒执行就是将某些逻辑延迟到使用时再计算。该技术可以用于首屏优化,对于某些耗时逻辑并不需要在首屏就使用的,就可以使用懒执行。懒执行需要唤醒,一般可以通过定时器或者事件的调用来唤醒懒加载懒加载就是将不关键的资源延后加载懒加载的原理就是只加载自定义区域(通…...

    2024/5/6 6:28:16
  20. ULPFEC在WebRTC中的实现

    jianshu.com/p/06a27ebacec7...

    2024/5/5 6:22:47

最新文章

  1. nodejs后台babel在线热编译jsx

    浏览器加载react/vue组件时&#xff0c;遇到es6转es5&#xff0c;jsx转js...时&#xff0c;一种方法是用webpack离线编译&#xff0c;一种方法是用babel在线热编译&#xff08;为了效率部署前可以预热&#xff09;。 我比较喜欢在线热编译&#xff0c;好处是发布时快&#xff…...

    2024/5/10 8:16:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

    1、演示 2、介绍 这个指令不是原生自带的&#xff0c;需要手动去书写&#xff0c;但是这辈子只需要编写这一次就好了&#xff0c;后边可以反复利用。 3、关键API IntersectionObserver IntersectionObserver 是一个用于监测元素是否进入或离开视口&#xff08;viewport&#x…...

    2024/4/30 3:06:26
  4. dp小兰走迷宫

    昨天学习了bfs的基本概念&#xff0c;今天来做一道经典习题练练手吧&#xff01; bfs常用的两类题型 1.从A出发是否存在到达B的路径(dfs也可) 2.从A出发到B的最短路径&#xff08;数小:<20才能用dfs&#xff09; 遗留的那个问题的答案- 题目&#xff1a;走迷宫 #incl…...

    2024/5/9 17:21:27
  5. Unity核心学习

    目录 认识模型的制作流程模型的制作过程 2D相关图片导入设置图片导入概述纹理类型设置纹理形状设置纹理高级设置纹理平铺拉伸设置纹理平台打包相关设置 SpriteSprite Editor——Single图片编辑Sprite Editor——Multiple图片编辑Sprite Editor——Polygon图片编辑SpriteRendere…...

    2024/5/10 0:25:51
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/10 1:36:26
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/9 7:40:42
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/9 2:44:26
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/10 2:07:45
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/10 8:07:24
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/9 5:40:03
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/10 8:16:30
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/10 2:07:43
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/10 2:07:43
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/9 4:12:16
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/9 7:40:35
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/9 19:47:07
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/9 7:40:34
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/10 2:07:41
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/9 5:02:59
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/9 4:31:45
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/9 16:54:42
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/10 1:31:37
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/9 6:36:49
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/9 4:33:29
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57