51dev.com IT技术开发者社区

51dev.com 技术开发者社区

C语言:快速排序

C语言:快速排序

快速排序是排序算法中,平均时间复杂度为O(n*logn)的一种算法,其实现需要先解决这样的一个问题,对一个序列A[1],A[2],A[3].......A[N],调整序列中元素的位置,使得A[1](原序列中的第一个元素,下同)的左侧所有元素都不超过A[1],右侧所有元素都大于A[1],例如对序列{5,3,9,6,4,1...

滴水算法小结

滴水算法小结

滴水算法是一种用于分割手写粘连字符的算法,与以往的直线式地分割不同,它模拟水滴的滚动,通过水滴的滚动路径来分割字符,可以解决直线切割造成的过分分割问题。以下将分别叙述:传统滴水算法惯性滴水算法大水滴惯性滴水算法.传统滴水算法滴水算法滴落规则 滴落规则如图[1-1]所示 图[1-1]滴水算法滴落规则&...

算法入门之一循环与递归

算法入门之一循环与递归

递归与循环理论上,任何循环都可以重写为递归的形式 有时候,为栈限制,需要尾递归java不支持尾递归有些语言没有循环语句只能使用递归改为递归的关键是发现逻辑“相似性”不能忘记递归的出口例:从0打印到n可以使用循环的语句我负责打印最后一个n 但是我前面的人负责打印0–...

KMP算法简介

KMP算法简介

KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。讲道理 大串A(长度n)小串B(长度m) 一般匹配字符串,一个一个比,当前字符对了则比对下一个,不对了再从B的头开始比,移动一个位置;这样的时间复杂度是O(n*m) ...

递归算法与迭代算法的区别

递归算法与迭代算法的区别

举个例子:我想求1+2+3+4+..+100的值。迭代的做法:从1到100,顺着往下累加。1+2=3,3+3=6,6+4=10,10+5=15……程序表示,inti=1,sum=0;while(i<=100){sum=sum+i;}递归的做法:我要求1到100的累加值,如果我已经得到1...

java之对称加密算法

java之对称加密算法

对称加密算法是以一种使用频率高的初等的加密算法,如你所想,之所以称之为对称加密算法,说明加密秘钥是相同,加密过程可逆,而前面介绍的base64加密,和消息摘要加密算法是不可逆的.一般的对称加密算法有DES,DES秘钥长度不够,易被破解,进而衍生出了3DES,在DES的基础上又出现了AES算法,还有PBE,IDEA等算法...

临接表转化矩阵和图和散列表存储详解

临接表转化矩阵和图和散列表存储详解

Algorithm算法分析:017.06.03专项:临接表转化矩阵和图,并实现图遍历;已知有向图的邻接表如下图所示(1)给出该图的邻接矩阵;(2)从结点A出发,写出该图的深度优先遍历序列。 回答:(根据表可以的知,A有到B和C的有向线路,所以(0,1)和(0,2)为1,其他都为0,以此类推,可以得到现在的矩阵...

java多线程之龟兔赛跑问题

java多线程之龟兔赛跑问题

/** *Description:龟兔赛跑游戏<br/> *Copyright(c),2016,Jansonxu<br/> *Thisprogramisprotectedbycopyrightlaws.<br/> *ProgramName:ToristAndRabbitRunGame...

几个简单的对数增长阶算法

几个简单的对数增长阶算法

最近在看scip,不得不说,这本书的确是经典之作,每天抽出时间看一会上面所讲的东西,对我这样编程算法基础薄弱的人,也是受益匪浅。所以想把上面的一些好的算法用自己熟悉的javascript重新写一遍,加深记忆。两个整数a和b的最大公约数(GCD)定义为能除尽这两个数的那个最大的整数。在SCIP中提到了一种基于欧几里得算法...

拜占庭将军问题----口头协议

拜占庭将军问题----口头协议

拜占庭将军问题是一个共识问题: 首先由LeslieLamport与另外两人在1982年提出,被称为TheByzantineGeneralsProblem或者ByzantineFailure。核心描述是军中可能有叛徒,却要保证进攻一致,由此引申到计算领域,发展成了一种容错理论。随着比特币的出现和兴起,这个著名问...

区块链技术六大核心算法

区块链技术六大核心算法

区块链是以比特币为代表的数字加密货币体系的核心支撑技术。区块链技术的核心优势是去中心化,能够通过运用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式系统中实现基于去中心化信用的点对点交易、协调与协作,从而为解决中心化机构普遍存在的高成本、低效率和数据存储不安全等问题提供了解决方案。 而...

几种经典的数据排序及其Java实现

几种经典的数据排序及其Java实现

选择排序思想n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新...

算法笔记:提取拼音首字母(Java)

算法笔记:提取拼音首字母(Java)

在很多软件中,输入拼音的首写字母就可以快速定位到某个词条。比如,在铁路售票软件中,输入:“bj”就可以定位到“北京”。怎样在自己的软件中实现这个功能呢?问题的关键在于:对每个汉字必须能计算出它的拼音首字母。GB2312汉字编码方式中,一级汉字的3755个是按照拼音顺序排列...

算法笔记:找零问题(Java实现)

算法笔记:找零问题(Java实现)

现需找零金额为n,则最少需要用多少面值为d1<d2<d3<...<dm的硬币?(PS:假设这m种面值d1<d2<d3<...<dm的硬币,其中d1=1,且每种硬币数量无限可得)本文编码思想参考自《算法设计与分析基础》第三版,具体讲解如下:  具体代码如...

海量数据处理算法总结

海量数据处理算法总结

【BloomFilter】BloomFilter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。BloomFilter有可能会出现错误判断,但不会漏掉判断。也就是BloomFilter判断元素不再集合,那肯定不在...