Shell排序算法

  希尔排序,也称递减增量排序算法,是直接插入排序算法的一种高速而稳定的改进版本。  希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。  先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量=1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位时间复杂度:最坏情况下为O(n^2),平均时间复杂度为O(nlogn);空间复杂度:归并排序需要一个大小为1的临时存储空间用以保存合并序列,所以空间复杂度为O(1)算法稳定性:从上面图片中可以看出,数字5在排序后交换了位置,所以它是不稳定的算法。&nbs...
代码星球 代码星球·2020-04-12

选择排序算法

三,选择排序    从算法逻辑上看,选择排序是一种简单直观的排序算法,在简单选择排序过程中,所需移动记录的次数比较少。 1,基本思想    选择排序的基本思想:比较+交换在待排序的一组数据中,选出最小(最大)的一个数与第一个位置的数交换,然后在剩下的数中,再找最小(最大)的数与第二个位置的数交换位置,依次类推,直到第N-1个元素与第N个元素交换位置,选择排序结束。2,过程描述    操作方法:第一趟:从n个记录中找出关键码最小的记录和第一个记录交换;第二趟:从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换以此类推......第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。 3,代码案例:    publicclassSelectSort{publicstaticvoidmain(String[]args){//定义一个数组in...
代码星球 代码星球·2020-04-12

学习笔记——SM2算法原理及实现

RSA算法的危机在于其存在亚指数算法,对ECC算法而言一般没有亚指数攻击算法SM2椭圆曲线公钥密码算法:我国自主知识产权的商用密码算法,是ECC(EllipticCurveCryptosystem)算法的一种,基于椭圆曲线离散对数问题,计算复杂度是指数级,求解难度较大,同等安全程度要求下,椭圆曲线密码较其他公钥算法所需密钥长度小很多。ECC算法描述:  1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。  2、用户A选择一个私有密钥k,并生成公开密钥(公钥PB)K=kG。  3、用户A将Ep(a,b)和点(公钥)K,G传给用户B。  4、用户B接到信息后,将待传输的明文(M)编码到Ep(a,b)上一点M,并产生一个随机整数r(r<n)。加密开始  5、用户B计算点C1=M+rK;C2=rG。  6、用户B将C1、C2传给用户A。  7、用户A接到信息后,计算C1-kC2,结果就是点M。因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M  再对点M进行解码就可以得到明文。  密码学中,描述一条Fp上的椭圆曲...

高斯模糊原理算法

作者:Hohohong链接:https://www.jianshu.com/p/8d2d93c4229b來源:简书图像卷积滤波与高斯模糊1.1图像卷积滤波对于滤波来说,它可以说是图像处理最基本的方法,可以产生很多不同的效果。以下图来说图中矩阵分别为二维原图像素矩阵,二维的图像滤波矩阵(也叫做卷积核,下面讲到滤波器和卷积核都是同个概念),以及最后滤波后的新像素图。对于原图像的每一个像素点,计算它的领域像素和滤波器矩阵的对应元素的成绩,然后加起来,作为当前中心像素位置的值,这样就完成了滤波的过程了。可以看到,一个原图像通过一定的卷积核处理后就可以变换为另一个图像了。而对于滤波器来说,也是有一定的规则要求的。①滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。②滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。③如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常...
代码星球 代码星球·2020-04-12

高并发系统限流-漏桶算法和令牌桶算法

高并发系统限流-漏桶算法和令牌桶算法  参考:http://www.cnblogs.com/LBSer/p/4083131.htmlhttps://blog.csdn.net/scorpio3k/article/details/53103239https://www.cnblogs.com/clds/p/5850070.htmlhttp://jinnianshilongnian.iteye.com/blog/2305117http://iamzhongyong.iteye.com/blog/1742829     某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的请求对系统压力过大而引起的系统瘫痪,当流量过大时,可以采取拒绝或者引流等机制。  ...

算法)稳定婚姻匹配

婚介所登记了N位男孩和N位女孩,每个男孩都对N个女孩的喜欢程度做了排序,每个女孩都对N个男孩的喜欢程度做了排序,你作为月老,能否给出稳定的牵手方案?稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的。  1962年,美国数学家DavidGale和LloydShapley发明了一种寻找稳定婚姻的策略。不管男女各有多少人,不管他们各自的偏好如何,应用这种策略后总能得到一个稳定的婚姻搭配。换句话说,他们证明了稳定的婚姻搭配总是存在的。有趣的是,这种策略反映了现实生活中的很多真实情况。   算法中采用了男生主动追求女孩的形式。算法步骤描述:  第一轮,每个男人都选择自己名单上排在首位的女人,并向她表白。这种时候会出现两种情况: (1)该女士还没有被男生追求过,则该女士接受该男生的请求。 (2)若该女生已经接受过其他男生的追求,那么该女生会将该男士与她的现任男友进行比较,若更喜欢她的男友,那么拒绝这个人的追求,否则,抛弃其男友 ...
代码星球 代码星球·2020-04-12

身份证格式验证算法

今天在九城注册WOW,发现身份证号码输入只能输入真实号码才能通过,非常惊讶,不知道他怎么检测出来的。后来经软件群里无名火的点拨,搜刮到这些资料,与大家共享。18位身份证标准18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下: 一、范围 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。 二、编码对象 公民身份号码的编码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日...

Johnson 全源最短路径算法

解决单源最短路径问题(SingleSourceShortestPathsProblem)的算法包括:Dijkstra单源最短路径算法:时间复杂度为O(E+VlogV),要求权值非负;Bellman-Ford单源最短路径算法:时间复杂度为O(VE),适用于带负权值情况;对于全源最短路径问题(All-PairsShortestPathsProblem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离。例如,对每个顶点应用 Bellman-Ford算法,则可得到所有顶点间的最短路径的运行时间为 O(V2E),由于图中顶点都是连通的,而边的数量可能会比顶点更多,这个时间没有比 Floyd-Warshall 全源最短路径算法 O(V3)更优。那么,再试下对每个顶点应用Dijkstra算法,则可得到所有顶点间的最短路径的运行时间为 O(VE+V2logV),看起来优于Floyd-Warshall算法的O(V3),所以看起来使用基于 Dijkstra算法的改进方案好像更好,但问题是 ...

遗传算法(GA)

来自:https://blog.csdn.net/u010451580/article/details/51178225  遗传算法是模仿生物进化机制的随机全局搜索和优化方法。借鉴达尔文进化论和孟德尔的遗传学说。 相关术语:  基因型(genotype):性状染色体的内部表现;  表现形(phenotype):性状外部表现。或个体的外部表现。  进化(evolution):种群逐渐适应生存环境。生物进化是以种群的形式进行。  适应度(fitness):度量某个物种对生存环境的适应程度。  选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是基于适应度的优胜劣汰的过程。  复制(reproduction):细胞分裂时,DNA通过复制转移到新细胞,新细胞继承旧细胞的基因。  交叉(crossover):两个染色体相同位置DNA被切断,前后两串分别交叉组合成两个新染色体。  变异(mutation):复制时小概率产生差错,产生新染色体,表现出新性状。  编码(coding):DNA中遗传信息在一个长链上按一定模式排列。  解码(decoding):基因型...
代码星球 代码星球·2020-04-12

C#数据结构

一、截取method:ykcloud.wm.reverse.ship.pick.update.and.finishcode:-23009message:商品:107274短拣,需求数量:2.0,录入数量:0.0varss=error.Split('','').ToList().First(ee=>ee.Contains("code"));varsss=ss.Split(':');varssss=sss[1];MessageHelper.InfoMsg(error);或者简写varcode=error.Split('','').ToList().First(ee=>ee.Contains("code")).Split(':')[1].Trim();  ...
代码星球 代码星球·2020-04-12

Dijkstra 算法

这里介绍 Dijkstra 算法,它是一个应用最为广泛的、名气也是最大的单源最短路径算法Dijkstra算法有一定的局限性:它所处理的图中不能有负权边「前提:图中不能有负权边」换句话说,如果一张图中,但凡有一条边的权值是负值,那么使用 Dijkstra算法就可能得到错误的结果不过,在实际生活中所解决的问题,大部分的图是不存在负权边的如:有一个路线图,那么从一点到另外一点的距离肯定是一个正数,所以,虽然 Dijkstra算法有局限性,但是并不影响在实际问题的解决中非常普遍的来使用它 看如下实例:(1)初始  左边是一张连通带权有向图,右边是起始顶点 0 到各个顶点的当前最短距离的列表,起始顶点 0 到自身的距离是 0(2)将顶点 0 进行标识,并作为当前顶点  对当前顶点 0 的所有相邻顶点依次进行松弛操作,同时更新列表从列表的未标识顶点中找到当前最短距离最小的顶点,即 顶点 2,就可以说,...
代码星球 代码星球·2020-04-12

传统流程图(用于设计分析算法

 流程图是每一个程序编制人员都应当熟练掌握的! 只要规定好三种基本结构的流程图的画法,就可以画出任何算法的流程图! 三种基本结构:1.顺序结构:        顺序结构是最简单的一种线性结构。  执行顺序:执行完A后必定会执行B。 2.选择结构:   此结构中必包含一个判断框!根据给定的条件是否成立而选择执行A框或者B框!(无论走哪一条路线,在执行完之后均会通过最终交汇的点,然后脱离本选择结构) 执行顺序:图a)当条件为真时执行A,否则执行B;          图b)的执行序列为:当条件为真时执行A,否则什么也不做。 3.循环结构:(又称为重复结构,即反复执行某一部分的操作,有while和until两类循环结构) 第一类:当型(while型)循环结构   &n...

非负矩阵分解(NMF)原理及算法实现

一、矩阵分解回想矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积。对于上述的用户-商品(评分矩阵),记为能够将其分解为两个或者多个矩阵的乘积,如果分解成两个矩阵和 。我们要使得矩阵和 的乘积能够还原原始的矩阵当中,矩阵表示的是m个用户于k个主题之间的关系,而矩阵表示的是k个主题与n个商品之间的关系通常在用户对商品进行打分的过程中,打分是非负的,这就要求:这便是非负矩阵分解(NMF)的来源。二、非负矩阵分解2.1、非负矩阵分解的形式化定义上面介绍了非负矩阵分解的基本含义。简单来讲,非负矩阵分解是在矩阵分解的基础上对分解完毕的矩阵加上非负的限制条件。即对于用户-商品矩阵找到两个矩阵和 ,使得:同一时候要求:2.2、损失函数为了能够定量的比较矩阵和的近似程度,提出了两种损失函数的定义方式:欧几里得距离:KL散度:在KL散度的定义中,。当且仅当时取得等号。当定义好损失函数后,须要求解的问题就变成了例如以下的形式,相应于不同的损失函数:求解例如以下的最小化问题:2.3、优化问题的求解乘法更新规则,详细操作例如以下:对于欧几里得距离的损失函数:对于KL散度的损失函数...

关于C语言的几个考试编程题目

  提交要求:1:邮件名称:学号后三位-题目编号-姓名-期中考试。例如:098-1-沈苗-期中考试2:不用附件提交,直接写邮件,内容包括编程思路(写一段自己对题目的认识、思路、技术细节等)、源代码、运行结果分析和截图题目:1.编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。编程思路: 1)计算机“想”一个1-100的数,则需要程序在运行的时候随机产生一个1-100之间的自然数,需要使用rand()和srand((int)time(0))函数; 2)猜数者“猜”数:则是用户每次输入的数字与随机产生的数进行比较,使用if..else..进行判断; 3) 猜数者只有10次机会,则需要使用for或while循环进行控制次数,本程序选择使用for循环; 4)另外程序结束和...

霍夫曼编码压缩算法

 霍夫曼编码压缩算法,是数据压缩中经典的一种算法。这是一种根据文本字符出现的频率,重新对字符进行编码,频率越高的词,编码越短,从而达到数据压缩的效果。假设我们有这样的一段数据需要进行编码——“beepboopbeer!”。这段字符通过ASCII编码后的结果为6265657020626F6F70206265657221(十六进制),总共有十五个字节。首先,我们先计算每个字符出现的频率,经过我们统计,得到下面一张表:   然后把这些数放到优先级队列中,从左到右,频率逐渐增加。下面我们需要把这个队列,转换成霍夫曼二叉树,这是一个带有权重的二叉树,在队列中每个字符出现的次数,标识这个字符的权重,霍夫曼二叉树始终保证权重高的在越高的地方。下面来介绍,二叉树是如何演变的。我们从最左边开始,取两个元素来构造一个二叉树(第一个元素是左结点,第二个是右结点),并把这两个元素的权重相加,得到新的空元素。同理,我们继续取最左边两个元素,进行权重相加(2+2=4),相加结果变大,需要对权重进行重新排序。继续执行同样的操作,...
代码星球 代码星球·2020-04-12
首页上一页...104105106107108...下一页尾页