- 博客(103)
- 收藏
- 关注
原创 红黑树
1.概念:红黑树是一种近似平衡的二叉搜索树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。2.性质:1.每个节点不是红色就是黑色;2.根节点是黑色;3.叶子节点(NULL节点)是黑色的;4.红色节点的两个孩子必须是黑色的;5.对于每个节点,从该节点出发到叶子节点所有路径上的黑色节点数相等。因为要满足红黑树的这五条性质,如果我们插入的是黑色节点就一定会
2020-10-08 18:18:11
272
原创 最小生成树以及Kruskal算法,Prime算法
一、最小生成树连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。强连通图:在有向图中,若在每一对顶点vi和vj之间都存在一条从vi到vj的路径,也存在一条从vj 到 vi的路径,则称此图是强连通图。生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点 和n- 1条边连通图中的每一棵生成树,都是原图的一个极大无环子图,即从其中删去任何一条边,生成树就不在连通;反之,在其中引入任何一条新
2020-08-10 21:01:48
562
1
原创 图的存储和遍历
一、图的存储因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和边关系即可。节点保存比较简单,只需要一段连续空间即可。1、 邻接矩阵因为节点与节点之间的关系就是连通与否,即为0或者1,因此邻接矩阵(二维数组)即是:先用一个数组将定点保存,然后采用矩阵来表示节点与节点之间的关系。注意:无向图的邻接矩阵是对称的,第i行(列)元素之和,就是顶点i的度。有向图的邻接矩阵则不一 定是对称的,第i行(列)元素之后就是顶点i 的出(入)度。如果边带有权值,并且两个
2020-08-10 18:15:09
888
原创 怎样让部署在云服务器上的linux项目一直运行
1. 安装(命令行执行任务)CentOS 系列系统: yum install screenUbuntu 系列系统: sudo apt-get install screen2. 创建 screen 窗口 screen -S name //name是开辟的新进程的名字注意,执行 screen -S name 之后系统会跳进一个新窗口,这个窗口就是我们创建的新进程(它来执行我们的命令)。 在这里面进行项目的启动即可。在这个新窗口中可以运行要运行的项目。3. 退出保存CTRL+a+d
2020-08-03 09:19:41
1326
1
原创 LRU算法
1.什么是LRU CacheLRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为In
2020-07-27 14:24:22
226
原创 银行家算法
1 .死锁2.银行家算法的由来3.银行家算法的作用1.大概流程:2.详细设计由此可见,安全性算法实际是银行家算法的一部分,为当前系统找到一个安全序列,却保此刻的系统的分配状态能够保证内存中的进程全部顺利完成。至此,所有测试用例结束,这6种用例包含了所有可能会出现的情况,从而保证系统在分配资源时能合理的避免死锁的发生...
2020-07-25 18:23:45
33502
9
原创 进程分配算法(FCFS,SJF,RR)
一、进程调度算法的背景在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如系统吞吐量、资源利用率、作业周转时间或响应的及时性等,在很大程度上都取决于处理机调度性能的好坏。因而,处理机调度便成为OS中至关重要的部分。了解进程调度算法可以更好的理解操作系统是如何将资源合理的分配给各个正在运行的进程。理解三种进程调度算法可以充分利用计算机系统中的
2020-07-25 17:50:36
3461
原创 动态分区分配算法(First Fit,Next Fit,Best Fit,Worst Fit)
一、动态分区分配算法的背景为了能将用户程序装入内存,必须为它分配一定大小的内存空间。连续分配方式是最早出现的一种存储器分配方式, 曾被广泛应用于上世纪60~ -80 年代的OS中,该分配万式为个用户程序分配 一个连续的内存空间, 即程序中代码或数据的逻辑地址相邻,体现在内存空间分配时物理地址的相邻。连续分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式,其中动态分区分配算法就是此实验的实验对象。动态分区分配又称为可变分区分配,它是根据进程的实际需要,动态地
2020-07-25 17:29:03
36618
10
原创 并查集介绍及应用
一、并查集原理并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题只能用并查集来描述。并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。举个栗子:某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0,1,2,3
2020-07-24 16:48:18
1195
原创 B树实现,B*,B+树介绍,B树应用
一、B树概念1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树(有些地方写的是B-树,注意不要误读成"B减树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:根节点至少有两个孩子每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1
2020-07-13 19:09:48
684
原创 浅拷贝,深拷贝和写时拷贝对比
一、浅拷贝也称位拷贝,编译器只是将对象中的值采用基本类型值复制的方式拷贝过来,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放, 以为还有效,所以当继续对资源进行操作时,就会发生访问违规。当类里面有指针对象时,拷贝构造和赋值运算符重载只进行值拷贝,两个对象共用同一块空间,对象销毁时程序会发生内存访问违规...
2020-06-02 19:38:11
212
原创 C++中const和非const对象分别调用const和非const成员函数
一、先来提出问题const对象可以调用非const成员函数吗?非const对象可以调用const成员函数吗?const成员函数内可以调用其它的非const成员函数吗?非const成员函数内可以调用其他的const成员函数吗?二、实践出真知实践发现:1、const对象可以调用const成员函数2、const对象不能调用非const成员函数3、非const对象可以调用const成员函数4、非const对象可以调用非const成员函数5、const成员函数不能调用非const成员函数
2020-06-01 18:15:01
5095
原创 计算机中的大端存储和小端存储
一、大小端介绍"大端"和"小端"表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序。大端存储模式:数据的低位保存在内存中的高地址中,数据的高位保存在内存中的低地址中;小端存储模式:数据的低位保存在内存中的低地址中,数据的高位保存在内存中的高地址中;二、为什么会有大小端存储模式1、cpu和编译器的不同在计算机系统中我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit,但是在C语言中除了8bit的char之外,
2020-05-25 17:07:35
38266
8
原创 Pretues和Keil使用stm32F103C6芯片实现跑马灯
一、Protues创建工程添加好名称,不断下一步就行:二、pretues添加原件,构建电路图;二、keil做代码:添加文件这里不做说明,注意一下几个点:1.芯片使用stm32F103c62.mdk的汇编文件随之改变3.宏定义改成stm32F103c6的宏4.主函数代码实现:#include "stm32f10x.h"GPIO_InitTypeDef GPIO_...
2020-05-05 11:01:30
11939
5
原创 我的C++项目----文件加密工具
文件加密工具1、对称加密:1976年以前所有的加密方式都是:甲采用一种加密方式对信息进行加密,乙采用同一种规则对信息进行解密。但是这样一来,有一个极大的缺陷,就是乙要进行解密工作,甲就得告诉乙解密规则,否则无法解密。保存和传递这个规则就成了最大的难题。2、非对称加密:乙方生成两把秘钥(公钥和私钥),公钥是公开的,任何人都可以获取。私钥是保密的,只有乙知道。甲方获取到公钥,然后对...
2020-04-24 07:37:27
547
原创 五种IO模型及三种IO多路转接(复用)模型
五种IO模型1、阻塞IO:在内核将数据准备好之前,系统调用会一直等待,所有的套接字,默认方式都是阻塞方式。2、非阻塞IO:如果系统调用还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询. 这对CPU来说是较大的浪费, 一 般只有特定场景使用。3、信号驱动IO: 内核将数据准备好...
2020-04-23 17:53:28
1959
原创 MySQL基本操作命令
一、主流数据库SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。 Oracle:甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS, 论坛。对简单的SQL处理效果好。PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用...
2020-04-21 12:50:56
347
原创 快速排序(C++版)
1.快速排序基本思想快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。将区间按照基准值划分为左右两半部分的常见方式有:前后指针版本挖坑法hoa......
2020-04-14 16:30:46
363
原创 我的项目---文件加密算法RSA
一、RSA算法基本原理1、RSA的由来1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人 的名字命名,叫做RSA算法。直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计 算机网络的地方,就有RSA算法。2、RSA的加/解密方式公钥(e,n),私钥(d,n)加密:密文 = (明...
2020-04-09 16:56:22
766
1
原创 HTTP协议
虽然说应用层协议是我们程序员自己定的,但实际上,已经有大佬们定义了一些现成的应用层协议,最典型的就是HTTP协议(超为本传输协议,起初是为了传输HTML(超文本文件))。1、URL(uniform resource located)/统一资源定位符URL就是我们通常说的"网址",其结构如下:url编码:提交给服务器的数据若遇到包含特殊字符,就需要对其进行url编码,按字符的每个字节转...
2020-03-21 23:35:58
320
原创 线程池
线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络 sockets等的数量。线程池的应用场景:1、需要大量的线程来完成任务,且完成任务...
2020-03-10 12:42:05
87
原创 VS2013配置Boost库
首先,在官网下载boost的最新版本Boost 1.59.0 ,或者在我的github下载。(1)首先,将下载的压缩包解压:(2)打开文件夹,找到bootstrap.bat文件,双击运行,等待自动运行完毕(3)运行完毕后,会新增一个bjam.exe文件,双击运行,等待执行完毕(这个过程会比较长),boost库初期安装完毕。(4)打开VS2013,创建一个工程,添加源文件main....
2020-02-27 21:57:18
221
原创 多线程(1)---线程概念&线程控制
一、线程概念:1、概念:线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在UnixSystem V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户...
2020-01-18 12:08:09
241
原创 进程间通信(IPC)
进程间通信(Interprocess communication)一、概述:进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。进程间通信是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须...
2020-01-16 18:59:12
370
原创 进程控制
一、进程创建创建一个进程就是创建一个PCB,并拷贝(写时拷贝)父进程中的信息,父子进程代码共享,数据独有。pid_t fork()---创建一空白pcb,复制父进程信息,各自有一块自己的虚拟地址空间返回值:>0:父进程区域,返回值为子进程的pid; =0,子进程区域; <0(-1),创建失败。pid_t vfork()---创建一空白pcb,复制父进程信息,共...
2020-01-13 16:40:32
143
原创 minishell
shell就是一个命令解释器实现思路:1、等待用户的标准输入 [ls -l -a]2、对用户数据进行解析,得到程序名称以及参数信息[-l]和[-a]
2020-01-13 16:19:43
274
原创 进程概念
1、什么是进程?进程就是一个PCB(struct task_struct ),是一个运行中的程序的描述,通过描述信息中的内存指针能够找到内存中运行的程序代码以及数据,并且通过上下文数据可以保存程序调度切换时正在处理的数据,以及通过程序计数器保存进程切换时程序即将执行的下一步指令等等,通过这些描述信息实现控制一个程序的运行,因此对于操作系统来说进程就是一个PCB。进程在操作系统中的调度切换运...
2020-01-08 15:59:51
1339
原创 AVL树及其实现(C++)
一、AVL树简单介绍在前面二叉搜索树中,我们可以看出它的查找销率非常高,最优可到达O(Log2(N)),但是当数据越接近有序的时候二叉搜索树将退化成一个链表,查找效率就能变成了O(N),因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis(AVL的由来)发明了AVL树:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中...
2019-12-16 14:58:01
778
原创 路径问题(Triangle,unique-path,Minimum Path Sum)
题目1:Triangle给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字, 例如,给出的三角形如下:[2],↵[3,4],↵[6,5,7],↵[4,1,8,3]↵最小的从顶部到底部的路径和是2 + 3 + 5 + 1 = 11。注意:如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。从倒数第...
2019-12-12 21:57:59
325
原创 word-Break
题目:给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如: 给定s=“leetcode”; dict=[“leet”, “code”].返回true,因为"leetcode"可以被分割成"leet code".题目中的例子不太合适,下面以traditionalculture为例,...
2019-12-12 15:52:58
337
原创 跳台阶及其一系列的动态规划问题
题目1:变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。 求该青蛙跳上一个n级的台阶总共有多少种跳法。解法1:(逆向求解)跳n阶,可以从n-1阶,n-2阶, n-3阶…0阶的基础上跳一次到达n阶,就是将n-1阶到0阶的各个跳法并求和。int jumpFloorII(int number) { int sum = 0; if (number &l...
2019-12-12 14:47:19
363
原创 二叉搜索树及其实现(C++)
1、二叉搜索树(二叉排序树)的性质:1、任意一个节点的值都大于左子树中所有节点的值。2、任意一个节点的值都小于右子树中所有节点的值。3、中序遍历按从小到大排列。4、可以是一颗空树5、不能有重复的值。2、查找:从根节点出发:1、若要找的值大于当前节点的值,在其右子树里继续找。2、若要找的值小于当前节点的值,在其左子树里继续找。3、若要找的值等于当前节点的值,返回true。...
2019-12-10 14:14:01
511
原创 最短编辑距离
给定两个字符串。定义三种操作:1.插入一个字符2.修改一个字符3.删除一个字符求最少几步操作使得第一个字符串变成第二个字符串。例如:第一个字符串lighten,第二个字符串fightingfighten (l->f) 修改fightin (e->i) 修改fighting (->g) 插入一共三步输入描述:第一行为一个字符串s(1<=|s|<...
2019-12-03 16:39:38
108
原创 不要二---欧几里得距离求蛋糕数
标题:不要二 | 时间限制:1秒 | 内存限制:32768K 二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一 块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根,小易想知道最多...
2019-11-13 22:18:46
259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人