【算法导论】树:二叉搜索树,平衡二叉树,红黑树,二叉堆,B-Tree,跳表
文章结构
二叉搜索树 - 1. 介绍
- 2. 插入
- 3. 删除
- 4. 二叉搜索树优化——随机二叉搜索树
平衡二叉树 - 1. 介绍
- 2. 旋转(重要基础,维护性质的操作)
- 3. 插入
- 4. 删除
红黑树 - 1. 介绍
- 2. 插入
- 下面是case A代码的三种情况
- 3. 然后我们看一个例子
二叉堆 - 1. 介绍
- 2. 上滤,下滤(重要基础,维护性质的操作,大根堆为例)
- 2.1 上滤:增大值或者插入操作需要用到
- 2.2 下滤:减小值或者删除操作需要用到
- 3. 如何建立堆
- 3. 应用:堆排序
- 4. 应用:优先队列
- 1.返回最大值
- 2. 出队操作
- 3. 入队操作
- 4. 修改值
B-Tree - 1. 磁盘介绍
- 2. B-tree介绍
- 3. B- tree的查找
- 4. B- tree的插入
- ① 直接插入成功:插入30
- ② 需要分裂的插入,在上面插入完30后,插入26
- 5. B- tree的删除
- ①不是最底层的某个非终端结点
- ② 是最底层的某个非终端结点
跳跃表 - 1. 介绍
- 2. 查询
- 3. 插入
- 4. 删除
证明专区 - 1. 红黑树证明:每个基本操作O(lgn)
- 2. 随机BST证明:期望高度为Θ(lgn)
- 3. 跳表证明:理想跳跃表搜索代价(2层)
- 4. 跳表证明:我们选择掷硬币的方式有没有保证每个操作是O(lgn)
下面主要是我学习《算法导论》的笔记,发现之前的自己竟然能耐心学了那些证明,原来自己现在变弱了,汇总记录,好以后复习,也分享出来
二叉搜索树
1. 介绍
树中的每个结点X,他的左子树中所有项的值都小于X的值,右子树所有项的值都大于X的值
2. 插入
就像查找树中是否有X结点那样沿着树查找,如果找到X,则做一些 “更新” ,否则就将X插入到遍历的路径上的最后一点
注:对于重复圆的插入可以通过在节点中记录附加字段,以指示此数据出现的频率
浅色节点为插入的路径
//将k插入t树中
void insert(AVLnode *&t,int k)
{if(t==NULL) t=new AVLnode(null,null,k); //设置新节点的左右孩子null,值k的构造函数if(x< value(t)) insert(t->left);if(x< value(t)) insert(t->left);if(x==value(t)) do something
}
3. 删除
发现X结点为树叶,删除X
发现X结点有一个儿子,调整X父亲的链指向X的儿子,删除X
发现X结点有两个儿子,整X父亲的链指向X右子树最小元素(或左子树的最大元素),删除X,这时候就会变成第一种和第二种情况
注:当删除的次数不多时,可以使用懒惰搜索,被删除了的做一个标记
//删除t树的k
bool delete(AVLnode *&t,int k)
{if(t==NULL) return false;//设置新节点的左右孩子null,值k的构造函数if(x< value(t)) delete(t->left,k);if(x> value(t)) delete(t->right,k);if(x==value(t)) deletethis(t);}void deletethis(AVLnode *&t){1. X结点为树叶处理2. X结点有一个儿子处理3. X结点有两个儿子处理}
4. 二叉搜索树优化——随机二叉搜索树
普通版本二叉排序树
BST_Sort(A):
T <- φ
for i <- 1 to nTree_Insert(A[i],T)
Inorder_Tree_Search()
与快速排序是失散多年的兄弟,此处更新中
BST的上的操作和树的高度有很大关系,上面的普通版本构造树假如是n个结点一棵完全二叉树,这些操作最坏的运行时间为Θ(lgn),而一旦这n个结点是一条线性链,那么同样得操作需要Θ(n)的最坏运行时间,而下面的随机构造的BST的期望高度为O(lgn)【下面证明】,因此基本操作的平均运行时间为Θ(lgn),这就是为什么需要构造随机BST
Random_BST_Sort(A):均匀随机打乱ABST_Sort(A):
在这里随机选取一个根节点,而快速排序随机选择随机pivot,所以他们最好最坏期望的运行时间都一样
平衡二叉树
1. 介绍
首先说一下树旋转
在数据结构中,树旋转(英语:Tree rotation)是对二叉树的一种操作,不影响元素的顺序(可以理解为旋转操作前后,树的中序遍历结果是一致的,也就是说旋转过程中也始终受二叉搜索树的主要性质约束:右子节点比父节点大、左子节点比父节点小),但会改变树的结构,将一个节点上移、一个节点下移。树旋转会改变树的形状,因此常被用来将较小的子树下移、较大的子树上移,从而降低树的高度、提升许多树操作的效率。
在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是O(lgn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。
2. 旋转(重要基础,维护性质的操作)
AVL的插入就像二叉查找树一样,不过为了维护性质,AVL树需要依靠旋转来达到平衡
对一棵树进行旋转时,这棵树的根节点是被旋转的两棵子树的父节点,称为旋转时的根(英语:root);如果节点在旋转后会成为新的父节点,则该节点为旋转时的转轴(英语:pivot),以下图表以四列表示四种情况,每行表示在该种情况下要进行的操作。在左左和右右的情况下,只需要进行一次旋转操作;在左右和右左的情况下,需要进行两次旋转操作。
注意:下面一开始的四幅图为插入或者删除导致失衡后的状态,三角形为高为h的树,C或者D树是插入或者删除这个节点所在的树,因为插入或者删除都需要从这个点开始向根的方向查找第一个失衡子树(下面的黄色点)
3. 插入
从插入点开始,需要从这个点开始向根的方向查找第一个失衡子树,然后以该失衡节点和他相邻的刚查过的两个节点构成调整子树,使之成为调整子树,使之成为新的平衡子树,当失衡的最小子树被调整成为平衡子树后,又是AVL
4. 删除
- 查找:现在平衡二叉树中查找到关键字为k的节点q
- 删除:删除q
- 若删除的是节点q,则从节点q向根的方向查找第一个失衡子树,进行旋转调整
红黑树
1. 介绍
- 每个节点要么是红色,要么是黑色
- root和leaves(nil)都是黑色
- 每一个红色结点有黑色父结点
- x出发到所有叶子结点的路径都有相等black-height(x)
black-height(x):不包括x本身的黑色结点高度
2. 插入
变色-旋转
//color[x]表示x的颜色,root[x]表示X的根,P[x]表示X的父亲结点
RB_Insert(T,x)Tree_Insert(T,x)color[x]<-Redwhile(x!=root[T] and color[x]==red) //不是根结点,或者黑色不断循环{if(p[x]==left[p[p[x]]]) //case A{y=right[p[p[x]]]if(color[y]=red) case 1else if(x=right[p[x]]) case 2case 3}else //case B{上面所有的left与right互换}color[root[t]]<-red }
下面是case A代码的三种情况
case 1
: 如果y是红色,插入的结点X,一开始与A冲突,然后变颜色把冲突传递给C,逐级上升
- case 1
- Z字型
case3 - 直线型,可以看出这是case2的结果,这也是为什么代码这么写的理由
循环的最大次数为lgn
3. 然后我们看一个例子
二叉堆
1. 介绍
二叉堆就是用数组实现的完全二叉树,所以它没有使用父指针或者子指针
①最大堆
,除根外,任意父亲节点值≥儿子节点值(性质)
,一般用于堆排序
②最小堆
,除根外,任意父亲节点值≤儿子节点值(性质)
,一般用于优先队列
完全二叉树只要一个数组就可以实现,而不需要链,也就是说如果树有
n
个结点,存在数组中的下标位为1~n
,很容易模拟结点的上下移动:由于位置为j
的父节点位置为⌊ j/2 ⌋
,两个子节点的位置分别为2j,2j+1
,比如14
的父亲⌊ 2/2 ⌋=1
,两个子节点4 与 5
完全二叉树
:除最底层外,该树完全充满,而且每层从左至右填充
2. 上滤,下滤(重要基础,维护性质的操作,大根堆为例)
上滤,下滤能够维护除根外任意父亲节点比儿子节点大的性质
,堆排序和优先队列都是上滤,下滤来实现
注:下面代码都是 [1~n],0号下标没有用
2.1 上滤:增大值或者插入操作需要用到
与它的父亲比较大小直到比他父亲小或者到顶了,类似于下
void up(int index, int *heap, int heapsize)
{int i; int key = heap[index];//compare with his father until failure or reaching the rootfor (i = index; key > heap[i / 2] && i >= 1; i = i / 2)heap[i] = heap[i / 2];if (i == 0) { i++; heap[i] = key; }//防止写入0else heap[i] = key;
}
2.2 下滤:减小值或者删除操作需要用到
与它的儿子比较大小直到比他儿子大或者到底了,类似于下
void down(int index,int *heap,int heapsize)
{int i; int key = heap[index];for (i = 2 * index; i <= heapsize; i = 2 * i ){if (i + 1 <= heapsize && heap[i] < heap[i + 1]) i ++;if (key < heap[i]) heap[i / 2]= heap[i];else break;}heap[i / 2] = key;
}
3. 如何建立堆
从最下非叶子结点层开始进行下滤down操作直到根结点
void createheap(int *Array,int heapsize)
{for (int i = heapsize/2; i>=1; i--)down(i, Array, heapsize);
}
3. 应用:堆排序
堆排序是一个优秀的算法,任何时候只需要常数个额外的元素空间存储临时数据,具有空间原址性,复杂度仅为O(nlgn)
- 首先要在先是堆的前提下进行排序,所以第一步要调用createheap,建立了[1~n]的堆
createheap(Array, 10);
- 然后不断让第一个结点与最后一个个结点互换,然后将这个结点从堆中去除(可以直接用heapsize–即完成),重复这一步直到堆中没有结点,下面只演示了排好三个,后面同理
void heapsort(int *heap)
{int p = heapsize;while (p>=1){//互换int temp = heap[1];heap[1] = heap[p];heap[p] = temp;p--; //从堆中去除down(1, Array, p);}
}
4. 应用:优先队列
优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中每一个元素都有一个相关的值,也就是关键字,优先队列分为最大优先队列和最小优先队列
- 最大优先队列 (为例)
- 应用有很多,比如共享计算机系统的作业调用。最大优先队列记录要执行的各个作业以及他们之间的相对优先级。当一个作业完成或被中断后,调度器将调用下面的dequeue,选出优先级最高的作业执行,并去除;调用下面的enqueue,插入新作业到队列中 最小优先队列
- 可以被用于基于事件驱动的模拟器等等,在此不一 一说了
1.返回最大值
int returnMax(int *heap)
{return heap[1];
}
2. 出队操作
出队的是第一个元素
操作步骤是被最后一个节点覆盖,然后将该结点从堆中去除(可以直接用heapsize–即完成),最后使用down下滤操作维护,如下出队16
void dequeue(int *heap)
{heap[1] = heap[heapsize];heapsize--;//去除down(1, heap, heapsize); //下滤
}
3. 入队操作
将将要插入的数字挂在数组末端且heapsize++ 入队后,使用up上滤来维护
void enqueue(int *heap,int num)
{heapsize++; //入队Array[heapsize] = num;up(heapsize, heap, heapsize); //上滤
}
4. 修改值
检查某个结点的值改动是增大还是变小,分别调用up和down操作
void modifyvalue(int *heap, int index,int num)
{ if (num > heap[index]) { heap[index] = num; up(index, heap, heapsize); }if (num < heap[index]) { heap[index] = num; down(index, heap, heapsize); }
}
B-Tree
1. 磁盘介绍
- 磁盘构造
- 如Fig2-20,磁盘是由多个铝盘叠成,每个磁表面有自己的磁头和磁盘臂
如Fig2-21,一个盘片有多个磁道(track,每个圆环),一个磁道被分为多个扇区(sector),每个扇区存取512字节
的数据区,如Fig2-19,数据区前有前导区(preamble)和纠错码(ECC),连续两个扇区之间有隔离带(intersector gap) - 磁头中有正或者负电通过时,就可磁化磁头正下方的磁盘表面,使磁性颗粒朝左或者朝右偏转,这就写入了
磁头通过磁性区域时,将被感应出正电路或者负电流,这样就读出了存在磁盘的数据位
读写过程 - 1. 寻道:寻找磁道,5~10ms(相邻<1ms)
2. 旋转:旋转磁道对应扇区至磁头下,旋转半圈为3~6ms
3. 读写:512字节扇区约3.5us
花费都在寻道和旋转上 数据结构 - 大规模数据存取,磁盘维护了文件的索引目录,找个文件的索引就可以找个文件在磁盘中正真的位置。
但由于磁盘读取是一个扇区一个扇区的读取,每当读取一个扇区后,我们需要将结点信息读到内存中判断我们要找的文件目录索引是不是在这里。
所以访问扇区数对应了我们I/O操作数,由上面我们已经知道了I/O操作花费的时间是大部分的。 于是我们读取结论:减少访问扇区数,也就是减少了I/O操作,也就节省了时间,所以选择一个合理的数据结构大大帮助我们读取磁盘,B-tree就来了 - B树(B-tree)是为磁盘或者其他直接存取辅存而设计的一种平衡搜索树,B树类似于红黑树,但他在降低I/O操作数方面要更好一些,并且许多数据库使用B树或者B树的变种来存储信息
磁盘原理理
2. B-tree介绍
是一种平衡的多路查找树,文件系统中很有用
m阶B-tree中(m叉)
- 三个约束
- 1.树中的每个结点至多有m棵子树 【插入需要用到这个约束】
2.除根之外的所有非终端结点至少有 ⌈m/2⌉棵子树 【删除需要用到这个约束】
3.根节点若不是叶子结点,则至少两棵子树 【根的约束】 关键字与指针的数量关系是 - 指针=关键字+1,即每个节点关键字个数最多为m-1 Ki-1 < (Ai-1) < Ki
- 指针(Ai-1)所指的子树的所有结点所有关键字均
<
Ki
指针(Ai-1)所指的子树的所有结点所有关键字均>
Ki-1 叶子F - 所有的叶子结点都出现在同一层次,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)
3. B- tree的查找
假设每个key含有文件的正真位置,且每个节点代表一个扇区
B-树的查找过程与二叉排序树查找类似,一路下去找,上面为演示寻找29,所以我们就找到了29文件的,详细写就是
-
找到文件目录的根扇区,将结点信息导入内存(29<35 定位左边子树指针)(1次I/O操作)
-
根据左边子树指针,我们定位到该扇区,将结点信息导入内存(29>27 定位右边子树指针)(2次I/O操作)
-
根据左边子树指针,我们定位到该扇区,将结点信息导入内存(29=29 找到文件正真位置)(3次I/O操作)
进行正真的I/O操作
4. B- tree的插入
一棵m阶的树,每次添加一个关键字不是在树中添加一个叶子结点,而是首先在最底层的某个非终端结点中添加一个关键字,若该结点关键字个数不超过m-1,则插入完成,否则要产生结点“分裂”
① 直接插入成功:插入30
- 执行流程
- 寻找到在哪里插入(定是在最底层的某个非终端结点中),然后按序添加一个关键字
② 需要分裂的插入,在上面插入完30后,插入26
- 分裂规则(插入第m个元素时需要分裂情况)
- 第
⌈m/2⌉
插入到双亲(向上取整,有小数就取1),也就是最中间的是分界点,两边各自形成新节点
- 执行流程
- 从动画中可以看出,因为该结点的数量超过2了,需要分裂,关键字37带着前后两个指针走了形成新的结点,关键字26带着前后两个指针走了形成新的结点,剩下的30去插入到双亲结点中,发现该结点没有超过两个,成功。
假如超过2个,关键字30插入过去的结点需要分裂,也就是执行上述类似过程,比如在最左边的叶结点插入10
5. B- tree的删除
一棵m阶的树,删除关键字Ki
,首先应该找到该关键字所在结点
①不是最底层的某个非终端结点
则可以使用指针Ai
中所指的最小关键字Y
代替Ki
(Ki的前驱或者后继),然后删除关键字Y
,让B-树的删除转化为最底层的某个非终端结点
操作,如下图删除45的情况
② 是最底层的某个非终端结点
-
是最底层的某个非终端结点中,删除后,其中的子树数目不少于
⌈m/2⌉
,则删除完成, -
左(右)兄弟可借:所删关键字结点的子树数目少于
⌈m/2⌉
,而其相邻的左(或右)两兄弟的子树数目⌈m/2⌉
,则需要将其兄弟结点中最小的(或最大)的关键字上移到双亲结点中,而将双亲结点中小于(或大于)且紧贴该上移关键字的关键字下下移至被删除关键字所在结点中。下面是删除50的动画演示【开始图是上一个删除45的图】 -
左(右)兄弟不可借:所删关键字结点的子树数目少于
⌈m/2⌉
,而其相邻的左(或右)两兄弟的子树数目等于⌈m/2⌉
,假设该结点有右兄弟,且其右兄弟结点地址由双亲结点中的指针Ai
,则删去关键字之后,他所在结点剩余的关键字和指针,加上双亲结点的关键字Ki
一起,合并到Ai所指的兄弟结点中(若没有右兄弟,则合并到左兄弟结点中)。下面是删除53的动画演示【开始图是上一个删除50的结果】
跳跃表
1. 介绍
坐地铁算法
动态搜索结构,一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集,下面是四层层,而且是理想条约表,高概率的可能基本操作为O(lgn) ,L4存储所有的元素,L1存储一些元素,然后L1和L2的元素之间相同元素互联
其中,插入、删除、查找以及迭代输出有序序列这几个操作,红黑树也可以完成,时间复杂度和跳表是一样的。
但是,按照区间查找数据这个操作,红黑树的效率没有跳表高。跳表可以在 O(logn)
时间复杂度定位区间的起点,然后在原始链表中顺序向后查询就可以了,这样非常高效。
此外,相比于红黑树,跳表还具有代码更容易实现、可读性好、不容易出错、更加灵活等优点,因此 Redis 用跳表来实现有序集合
2. 查询
往右走直到走过头,找到比他大的,然后回头一站往下走,直到找到x(到底层找到>x 的话说明没有)
3. 插入
插入与删除对于上面的理想跳跃表很难维护,我们都是选择是大致维护,
下面是wiki上面插入的动图,首先我们查询应该插入在哪里,我们做的是使用硬币来决定x应该存入到哪些表中,如果正面就再上升存储到上面的链表中,直到反面
coinRes=flip_coin(coin);
while(coinRes==head)
{promote(x);coinRes=flip_coin(coin);
}
4. 删除
就是把每个表中的那个元素删除
证明专区
1. 红黑树证明:每个基本操作O(lgn)
树的基本操作与树的高度直接相关,证明树高,也就证明了基本操作所耗费的时间
2. 随机BST证明:期望高度为Θ(lgn)
Jenson不等式就不证明了,只证明②
3. 跳表证明:理想跳跃表搜索代价(2层)
下面是求最小代价
类推到多个,k个,lgn个
4. 跳表证明:我们选择掷硬币的方式有没有保证每个操作是O(lgn)
首先证明一个引理
lemma: #levels=O(lgn) w.h.p.
即证明 :高概率使得跳跃表层数≤clgn
假如我们使用方向走从底部开始走,目标是走到最左边,那么这个路径长度是和正向走路径长度相同,每次走的时候,扔硬币正面为up move 向上走,背面 像左走,高概率的总的代价就是总move数,也就是抛硬币数(而且带有clgn次数为正面)
#up move ≤ #levels ≤ clgn(w.h.p.)
#move ≤ #coin filp till clgn heads
证明 :#coin filp till clgn heads =O(lgn)
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 运用数组将十进制整数转化为二进制
这里用到的方法是"除2取余,逆序排列"法 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,一直进行,直到商为小于1时为止,然后把得…...
2024/4/28 16:29:59 - Scala运算符
Scala 运算符的使用和 Java 运算符的使用基本相同,只有个别细节上不同。 一、算术运算符 运算符运算范例结果正号22-负号b3;-b-4加112减5-23*乘2*510/除5/51%取模(取余)7%52字符串相加“Sca”“la”“Scala”(1)对于除号“/”,它…...
2024/4/7 3:06:56 - 详细安装docker
一.配置 Linux:CentOS-7-x86_64-DVD-1810.iso 二.安装 1.如果之前安装过旧版本的Docker,可以使用下面命令卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \dock…...
2024/5/3 22:15:50 - http和https
http和https Http:超文本传输协议(Http,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计Http最初的目的是为了提供一种发布和接收HTML页面的方法。它可以使浏览器更加高效。 Http协议是以明文方式发送信息的&…...
2024/4/23 10:25:20 - 大道至简,看Lambda表达式如何将方法化繁为简
lambda表达式 lambda可以看作是匿名方法 函数式接口 一个接口有且只有一个抽象方法 可以有成员变量函数式接口允许定义顶层父类Object类里面的public方法可以定义静态方法,这个静态方法一定要有方法体可以有Default方法 可以在接口上添加注释FunctionalInterf…...
2024/4/23 10:29:38 - Mac Homebrew安装使用更换国内镜像
简介 Homebrew工具可以看作是mac上的软件包管理器,类似于yum之于centos或redhat和apt-get之于ubuntu,安装软件包会自动安装依赖的软件包,Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程。它…...
2024/4/23 10:31:51 - 【数据结构】手写双链表【纯C语言版】
摘要:本章主要讲述循环双链表的实现 文章目录本章导读1. 循环双链表的逻辑结构2. 循环双链表的代码实现2.1 定义循环双链表的存储结构2.2 创建结点2.2 初始化头结点2.3 计算链表长度2.4 尾插法2.5 尾删法2.6 打印链表2.7 头插法2.8 头删法2.9 查找具有指定数据的结点…...
2024/4/16 21:56:14 - PAT甲级1001 A+B Format
题目: 计算ab并以标准格式输出该和,即数字必须用逗号分成三组(除非小于四位)。 输入格式: 每个输入文件都包含一个测试用例。每个情况下都包含一对整数a和b,其中−106≤a,b≤106。这些数字用一个…...
2024/4/14 21:09:20 - 手机APP测试都要注意哪些问题?
APP测试是一个广泛的概念,根据每个app的应用场景不一样,测试的方向也略微的不同,在测试过程中需要灵活应用自身所知的测试手段。 安装测试 软件在不同操作系统(Android系统和IOS系统)上是否正常安装 软件在不同版本的…...
2024/4/23 10:24:18 - 使用vba 获取静态网页中的文字及链接信息
从csdn上找到了很多的材料,最终解决了自己的问题,按照我的思路记录一下,以便于自己以后查找。 打开一个网页,使用的是Set ht CreateObject("MSXML2.XMLHTTP")使用split函数拆分返回的网页源码信息,可以不停…...
2024/4/17 14:40:41 - 三分钟了解去中心化
微信、抖音、微博等数字媒体已经是我们日常生活不可或缺的一部分。但是 Web2 时代背景下的数字媒体有着值得关注的不足之处,例如不可溯源、无法检验、易侵权、内容中心化审查、恶意篡改等等问题。全球每天约有 250 万张图片被侵权,日均经济损失高达 6000…...
2024/4/16 21:56:50 - [vue小知识] Vue 生命周期总共分为几个阶段?
Vue 实例从创建到销毁的过程,就是生命周期。有8个常用的:1. beforeCreate 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 2. created 在实例创建完成后被立即调用。在这一步,实例已完成以下的配置&#…...
2024/4/23 10:28:01 - XGD算法设计上机考试(补充)
//最长公共子序列char a[200],b[200]; int c[200][200]{},n,m; int build() {int i,j;for(j1;j<n;j){for(i1;i<m;i){if(a[j-1]b[i-1]){c[j][i]c[j-1][i-1]1;}else if(c[j-1][i]>c[j][i-1]) c[j][i]c[j-1][i];else c[j][i]c[j][i-1];}}return c[n][m]; } int main() {c…...
2024/4/14 21:10:21 - 【五万字总结PCA】【李航|PRML】统计学习方法--16.主成分分析(详细推导)
本文略微有点长,请大家耐心观看,你一定会有收获 文章目录PCA数学原理数据的向量表示及降维问题向量的表示及基变换内积与投影基基变换的矩阵表示协方差矩阵及优化目标方差协方差协方差矩阵协方差矩阵对角化算法进一步讨论主成分分析(李航&…...
2024/4/16 21:57:08 - 1353. 滑雪场设计【难度: 一般 / 知识点: 枚举 贪心】
https://www.acwing.com/problem/content/1355/ 山的数据范围很小,直接暴力枚举即可。 #include<bits/stdc.h> using namespace std; const int N1100; int n,a[N]; int main(void) {cin>>n;for(int i0;i<n;i) cin>>a[i];int ans1e9;for(int …...
2024/4/19 23:00:20 - Java之使用分治算法解决斐波那契数列问题(Fibonacci Again)
文章目录前言一、实验目的二、思路分析1.构建一个存储结果的类2.编写相关处理函数3.编写主函数总结前言 分治算法 所谓分治就是指的分而治之即将较大规模的问题分解成几个较小规模的问题通过对较小规模问题的求解达到对整个问题的求解当我们将问题分解成两个较小问题求解时的分…...
2024/4/18 5:40:55 - 数据结构与算法 - 哈夫曼树与哈夫曼编码
以这题为例,演示一下哈夫曼树的构建过程,以及如何进行哈夫曼编码。 假设某消息中只包含7个字符怡{a,b,c,d,e,f,g},折7个字符在消息中出现的次数为{5,24,8,17,34,4,13},利用哈夫曼树(最优二叉树)为该消息中的…...
2024/4/14 21:09:51 - this的简单总结
上图是this指向按钮的情况 this的指向,谁调用指向谁,箭头函数没有this指向,通过上下文来判断它的this指向,之前的this指向谁就指向谁,普通函数的this指向window,它是window上面的方法...
2024/4/14 21:10:16 - React 组件基础
React 组件介绍 对特定功能的封装,主要用来对UI进行拆分。 内容 结构 HTML 样式 CSS 逻辑 JS 特点 独立 可复用 可组合 分类 基础组件:指input、button这种基础标签,以及antd封装过的通用UI组件 业务组件:由基础组件组合…...
2024/4/15 14:01:43 - ldap认证jupyter notebook
虽然jupyter hub是支持ldap的,见ldapauthenticator; 但是登录成功后似乎要以登录用户名启动notebook,而登录用户在服务器上不存在,于是500了; 在服务器上通过pam/nss进行ldap验证?别逗了,谁要那么干啊。 于是转换思路,核心仿照这篇博客:docker+centos7+nginx1.2.0+l…...
2024/4/7 3:06:46
最新文章
- stable-diffusion-webui配置
源码地址 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git报错Fresh install fail to load AttributeError: NoneType object has no attribute _id pydantic降级 pip uninstall pydantic pip install pydantic1.10.11记得要把clip-vit-large-patch14放在opena…...
2024/5/7 18:24:54 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null,那么typeof nullValue "?" const u …...
2024/5/7 4:57:38 - 腾讯云轻量服务器流量不够用了会怎么样?
腾讯云轻量应用服务器是限制月流量的,如果当月流量不够用了,流量超额了怎么办?流量超额后,需要另外支付流量费,如果你的腾讯云账号余额,就会自动扣除对应的流量费,如果余额不足,轻量…...
2024/5/1 13:01:36 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/7 5:50:09 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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