为您找到搜索结果:1674个
幂运算的高效率算法
问题描述:计算X^N.算法思想:如果N是偶数,我们有X^N=X^(N/2)×X^(N/2),如果N是奇数,则X^N=X^(N-1)/2×X^(N-1)/2×X。算法描述:longintPow(longintX,unsignedintN){if(N==0)return1;if(N==1)returnX;if(IsEven(N))returnPow(X×X,N/2);elsereturnPow(X×X,(N-1)/2)×X;}算法时间复杂度为O(logN)。...
欧几里德算法
欧几里德算法:欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数(Thegreatestcommondivisor)。其计算原理依赖于下面的定理:定理:gcd(a,b)=gcd(b,amodb)(a>b且amodb不为0)证明:a可以表示成a=kb+r,则r=amodb假设d是a,b的一个公约数,则有d|a,d|b,而r=a-kb,因此d|r因此d也是(b,amodb)的公约数因此(a,b)和(b,amodb)的公约数是一样的,其最大公约数也必然相等,得证。算法描述:unsignedintGcd(unsignedintM,unsignedintN){unsignedintRem;while(N>0){Rem=M%N;M=N;N=Rem;}returnM;}算法时间复杂度为O(logN)。...
对分查找算法
问题描述:给定一个整数X和整数A0,A1,...,A(N-1),后者已经预先排序并在内存中,求使得Ai=X的下标,如果X不在数据中,则返回i=-1.算法描述:intBinarySearch(constElementTypeA[],ElementTypeX,intN){intLow,Mid,High;Low=0;High=N-1;while(Low<=High){Mid=(Low+High)/2;if(A[Mid]<X)Low=Mid+1;elseif(A[Mid]>X)High=Mid-1;elsereturnMid;/*Found*/}returnNotFound;/*NotFoundisdefinedas-1*/}算法时间复杂度为O(logN)。...
TCP/IP 中的二进制反码求和算法
对于这个算法,很多书上只是说一下思路,没有具体的实现。我在这里举个例子吧以4bit(计算方便一点,和16bit是一样的)做检验和来验证。建设原始数据为1100,1010,0000(校验位)那么把他们按照4bit一组进行按位取反相加。1100取反0011,1010取反是0101,0011加上0101是1000,填入到校验位后1100,1010,1000那么这个就是要发送的数据。收到数据后同样进行按位取反相加。0011+0101+0111=1111;全为1表示正确另外注意,当地一步计算校验和的时候,有可能相加后最高位会有进位,那么不能舍弃,一定要加到低位,才能是结果正确。详细出处参考:http://www.jb51.net/article/30028.htm...
几种磁盘调度算法的描述
http://fenghuangwanghui.blog.163.com/blog/static/131807008201111307544377/一、磁盘调度主要思想设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即:L=(M1+M2+……+Mi+……+MN)/N其中Mi为所需访问的磁道号所需移动的磁道数。启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此,执行一次...
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
functionget_rand($proArr){$result='';//概率数组的总概率精度$proSum=array_sum($proArr);//概率数组循环foreach($proArras$key=>$proCur){$randNum=mt_rand(1,$proSum);if($randNum<=$proCur){$result=$key;break;}else{$proSum-=$proCur;}}unset($proArr);return$result;}$prize_arr=array('0'=>array('id'=>1,'prize'=>'平板电脑','v'=>1),'1'=>array('id'=>2,'prize'=>'数码相机','v'=>5),'2'=>array('id'=>3,'prize'=>'音箱设备','v'=>10),'3'=>array('id'=>4,'prize'=>'4G优盘','v'=>12),'4'=>array('...
翻转字符串算法
functionreverseString(str){2//第一步,使用split()方法,返回一个新数组3//varsplitString="hello".split("");45varsplitString=str.split("");//将字符串拆分67//返回一个新数组["h","e","l","l","o"]89//第二步,使用reverse()方法创建一个新数组10//varreverseArray=["h","e","l","l","o"].reverse();1112varreverseArray=splitString.reverse();13//原数组元素顺序反转["o","l","l","e","h"]1415//第三步,使用join()方法将数组的每个元素连接在一起,组合成一个新字符串16//varjoinArray=["o","l","l","e","h"].join("");1718varjoinArray=reverseArray.join("");19//"olleh"2021//第四步,返回一个反转的新字符串22returnjoinArray;//"o...
EM算法理解的九层境界
EM算法理解的九层境界EM就是E+MEM是一种局部下限构造K-Means是一种HardEM算法从EM到广义EM广义EM的一个特例是VBEM广义EM的另一个特例是WS算法广义EM的再一个特例是Gibbs抽样算法WS算法是VAE和GAN组合的简化版KL距离的统一第一层境界,EM算法就是E期望+M最大化最经典的例子就是抛3个硬币,跑I硬币决定C1和C2,然后抛C1或者C2决定正反面,然后估算3个硬币的正反面概率值。&amp;amp;amp;amp;amp;amp;amp;lt;imgsrc="http://www.51dev.com//FileUpload/news/202102/20210220010406955.jpg"data-caption=""data-size="normal"data-rawwidth="418"data-rawheight="262"class="content_image"width="418"/&amp;amp;amp;amp;amp;amp;amp;gt;这个例子为什么经典,因为它告诉我们,当存在隐变量I的时候,直接的最大...
过采样算法之SMOTE
SMOTE(SyntheticMinorityOversamplingTechnique),合成少数类过采样技术.它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下。(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。 (2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为o。 (3)对于每一个随机选出的近邻o,分别与原样本按照公式o(new)=o+rand(0,1)*(x-o)构建新的样本。 或者: Smote算法的思想其实很简单,先随机选定n个少类的样本,如下图 找出初始扩展的少类样本再找出最靠近它的m个少类样本,如下图...
Boosting算法(一)
本章全部来自于李航的《统计学》以及他的博客和自己试验。仅供个人复习使用。Boosting算法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。我们以AdaBoost为例。 它的自适应在于:前一个弱分类器分错的样本的权值(样本对应的权值)会得到加强,权值更新后的样本再次被用来训练下一个新的弱分类器。 在每轮训练中,用总体(样本总体)训练新的弱分类器,产生新的样本权值、该弱分类器的话语权,一直迭代直到达到预定的错误率或达到指定的最大迭代次数。 有两个问题需要回答:1.每一轮如何改变训练数据的权重或者是概率分布 =>提高那些被前一轮若分类器错误分类样本的权重,而降低那些被正确分类样本的权重值, so那些没有得到正确分类的数据由于其权重值加大而受到后一轮的弱分类器的更大关注。于是分类问题被一系列的弱分类器“分而治之”2.如何将如分类器组合成一个强分类器 =>弱分类器的组合,adaboost采取加权多数的表决方法:加大分类误差小的分类器的权值,使其在表决中起较大的作用,减少分类误差率大...
人工神经网络算法原理和应用
人工神经网络什么是人工神经网络?我们先从他的结构谈起说明:通常一个神经网络由一个inputlayer,多个hiddenlayer和一个outputlayer构成。图中圆圈可以视为一个神经元(又可以称为感知器)设计神经网络的重要工作是设计hiddenlayer,及神经元之间的权重添加少量隐层获得浅层神经网络SNN;隐层很多时就是深层神经网络DNN ...
GBDT算法之流失预警模型
挖坑。。。来日方长...
29、Java并发性和多线程-非阻塞算法
以下内容转自http://ifeve.com/non-blocking-algorithms/:在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法。在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的。为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法。阻塞并发算法一个阻塞并发算法一般分下面两步:执行线程请求的操作阻塞线程直到可以安全地执行操作很多算法和并发数据结构都是阻塞的。例如,java.util.concurrent.BlockingQueue的不同实现都是阻塞数据结构。如果一个线程要往一个阻塞队列中插入一个元素,队列中没有足够的空间,执行插入操作的线程就会阻塞直到队列中有了可以存放插入元素的空间。下图演示了一个阻塞算法保证一个共享数据结构的行为:非阻塞并发算法一个非阻塞并发算法一般包含下面两步:执行线程请求的操作通知请求线程操作不能被执行Java也包含几个非阻塞数据结构。AtomicBoolean,AtomicInteger,AtomicLong,AtomicReferen...
分布式缓存设计:一致性Hash算法
缓存作为数据库前的一道屏障,它的可用性与缓存命中率都会直接影响到数据库,所以除了配置主从保证高可用之外还需要设计分布式缓存来扩充缓存的容量,将数据分布在多台机器上如果有一台不可用了对整体影响也比较小。不多说,你懂我意思的!缓存的分布式集群和应用服务器不同,缓存的分布式是每台机器上的缓存数据是不一样的,不像应用服务器是无状态的,每台机器上的服务是一致的。缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须找到缓存有需要数据的服务器。所以保证在新上线机器和删除机器的时候整个集群中的已经缓存的数据尽可能地还被访问得到是分布式缓存系统设计的终极目录(这句话有点长)。如何选择到正确的服务器需要使用好的路由算法,下面以简单的余数Hash算法为例来选择服务器:首先用缓存数据的key的hash值除以服务器的数目,得到的余数就是集群服务器列表的下标。这样就可以定位到正确的服务节点。比如有3台服务器,node1,node2,node3对应在服务器列表编号为1,2,3。key为“Hello”的缓存查询请求来了之后,计算Hello的Hash值,假如为23432113,除以3余数假如是1,那就说明数据在no...
八数码问题及A*算法
一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。八数码问题一般使用搜索法来解。搜索法有广度优先搜索法、深度优先搜索法、A*算法等。这里通过用不同方法解八数码问题来比较一下不同搜索法的效果。二.搜索算法基类1.八数码问题的状态表示八数码问题的一个状态就是八个数字在棋盘上的一种放法。每个棋子用它上面所标的数字表示,并用0表示空格,这样就可以将棋盘上棋子的一个状态存储在一个一维数组p[9]中,存储的顺序是从左上角开始,自左至右,从上到下。也可以用一个二维数组来存放。2.结点搜索算法中,问题的状态用结点描述。结点中除了描述状态的数组p[9]外,还有一个父结点指针last,它记录了当前结点的父结点编号,如果一个...