为您找到搜索结果:2024个
机器学习核心算法之——贝叶斯方法
贝叶斯公式已经成为机器学习的核心算法之一,诸如拼写检查、语言翻译、海难搜救、生物医药、疾病诊断、邮件过滤、文本分类、侦破案件、工业生产等诸多方面都有很广泛的应用,它也是很多机器学习算法的基础。在这里,有必要了解一下贝叶斯公式。贝叶斯公式是以英国学者托马斯·贝叶斯(ThomasBayes)命名的。1763年RichardPrice整理发表了贝叶斯的成果《AnEssaytowardssolvingaProblemintheDoctrineofChances》,这才使贝叶斯公式展现在世人的面前。贝叶斯公式是为了解决”逆概”;问题而提出的。正概问题很常见,比如不透明袋中有黑球M个,白球N个,随手抓起一个球,求是黑球的概率,大家心算一下就能知道是$frac{M}{M+N}$。当然,生活中有大量这样的例子,像人口流动统计、金融统计等等,这些统计的特征就是我们事先已经知道了所有样本的分布情况,在此基础上进行概率的计算,这就是“正概”问题。但是,如果我们不知道所有样本的信息(这样的例子比比皆是,例如物理学中我们不可能看到所有电子的运行状态,...
银行家算法
1 需求分析 1.1 银行家算法的实现思想 允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。1.2 死锁的概念 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 银行家算法是避免死锁的一种重要方法。 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超...
浅谈Base64编码算法
一、什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码。 解码:利用编码使用的算法的逆运算,对经过编码的数据进行处理,还原出原始数据,这种操作称之为解码。 二、什么是Base64编码算法 可以将任意的字节数组数据,通过算法,生成只有(大小写英文、数字、+、/)(一共64个字符)内容表示的字符串数据。 即将任意的内容转换为可见的字符串形式。 三、Base64算法的由来 以前发送邮件只支持可见字符的传送。由此,需要有一个方法将不可见的字符转换为可见的字符,便产生了Base64编码算法 四、Base64算法的特点1、将数据按照 3个字节一组的形式进行处理,每三个字节在编码之后被转换为4个字节。 即:如果一个数据有6个字节,可编码后将包含6/3*4=8个字节2、当数据的长度无法满足3的倍数的情况下,最后的数据需要进行填充操作,即补“=”,这里“=”是填充字符,不要理解为第65个字符 eg:三...
SqList *L 和 SqList * &L的区别/学习数据结构突然发现不太懂 小祥我查找总结了一下
小祥在学习李春葆的数据结构教程时发现一个小问题,建立顺序表和输出线性表,这两个函数的形参是不一样的。代码在这里↓↓↓1//定义顺序表L的结构体2typedefstruct3{4Elemtypedata[MaxSize];5intlength;6}SqList;78//建立顺序表9voidCreateList(SqList*&L,ElemTypea[],intn)10{11inti;12L=(SqList*)malloc(sizeof(SqList));13for(i=0;i<n;i++)14L->data[i]=a[i];15L->length=n;16}17//输出线性表:18voidDispList(SqList*L)19{20inti;21for(i=0;i<L->length;i++)22printf(“%d”,L->data[i]);23printf(“”);24} 思考这个形参为什么要写成这两种形式,即SqList*L和SqList*&L的区别...
Rete算法
RETE算法介绍一、rete概述Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete是拉丁文,对应英文是net,也就是网络。Rete算法通过形成一个rete网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporalredundancy)和结构相似性(structuralsimilarity),提高系统模式匹配效率。二、相关概念2.1 事实(fact):事实:对象之间及对象属性之间的多元关系。为简单起见,事实用一个三元组来表示:(identifier ^attribute value),例如如下事实:w1:(B1 ^onB2) w6:(B2 ^colorblue)w2:(B1 ^onB3) w7:(B3 ^left-ofB4)w3:(B1 ^colorred) ...
C语言数据结构-创建链表的四种方法
结点类型:typedefintdatatype;typedefstructNODE{ datatypedata; structNODE*next; }Node,*LinkList;1、不带头结点的头插入法创建链表。 每创建一个结点,都使该结点成为头结点,这样头结点不断地向前移动,就可以创建一个没有特定头结点的链表。 首先创建的结点,会出现在整个链表的最末端,所以数据的写入是逆序的。 【开始的时候,head要初始化为NULL】LinkListLinkListCreate(constintn){inti;LinkListhead;Node*p;head=NULL;for(;i<n;i++){p=(Node*)malloc(sizeof(Node));if(NULL==p)perror("ERROR"); scanf("%d",&p->data);p->next=head;head=p;}}开始时候,head是一个空指针,创建一个结点p。现在head是指向一个链表的头结点,创建了一个新的结点p,向前插入。所以要p->next=head;然后...
最大公约数的算法
算法的原理: 对于辗转相除法:i和j的最大公约数,也就是i和j都能够除断它。换句话讲,就是i比j的n倍多的那个数k(i=j*n+k,即i%j=k)应该也是最大公约数的倍数。所以就能转换成求k和j的最大公约数。同理,对于更相减损术,同样的道理,i比j大的部分也是最大公约数的倍数。 代码: 1/**2*求最大公约数算法汇总3*4*/5publicclassGCD{6publicstaticvoidmain(String[]args){7GCDgcd=newGCD();8gcd.gcd1(43,45);9gcd.gcd2(64,80);10gcd.gcd3(45,81);11}121314/**15*第三种方法:更相减损术+辗转相除法,即16*当a和b均为偶数,gcb(a,b)=2*gcb(a/2,b/2)=2*gcb(a>>1,b>>1)17*当a为偶数,b为奇数,gcb(a,b)=gcb(a/2,b)=gcb(a>>1,b)18*当a为奇数,b为偶数,gcb(a,b)=gcb(a,b/2)=gcb(a,b>>1)19*当a和b...
[Data Structure & Algorithm] 七大查找算法
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在后续的博文中进行详细介绍。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类: 1)静态查找和动态查找; 注:静态或者动态都是针对查找表而言的。动态表指查找表中有删除和插入操作的表。 2)无序查找和有序查找。 无序查找:被查找数列有序无序均可; 有序查找:被查找数列必须为有序数列。 平均查找长度(AverageSearchLength,ASL):需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。 对于含有n个数据元素的查找表,查找成功的平均查找长度为:ASL=Pi*Ci的和。 Pi:查找表中第i个数据元素的概率。 Ci:找到第i个数据元...
算法之矩阵连乘
一.问题描叙 给定n个矩阵{A1,A2,……,An},其中Ai与Ai+1是可乘的,i=1,2,……,n-1。 例如: 计算三个矩阵连乘{A1,A2,A3};维数分别为10*100,100*5,5*50 按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次 按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次 所以要解决的问题是:如何确定矩阵连乘积A1A2,……An的计算次序,使得按此计算次序计算矩阵连乘积需要的数乘次数达到最小化。二.问题分析 由于矩阵乘法满足结合律,所以计算矩阵连乘的连乘积可以与许多不同的计算计算次序,这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说连乘积已完全加括号,那...
快三排序算法
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C.A.R.Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法。//快速排序voidquick_sort(ints[],intl,intr){ if(l<r) {//S...
KMeans (K均值)算法讲解及实现
算法原理KMeans算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。K个初始聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机地选取任意k个对象作为初始聚类中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离赋给最近的簇。当考查完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。算法过程如下:(1)从N个数据文档(样本)随机选取K个数据文档作为质心(聚类中心)。本文在聚类中心初始化实现过程中采取在样本空间范围内随机生成K个聚类中心。(2)对每个数据文档测量其到每个质心的距离,并把它归到最近的质心的类。(3)重新计算已经得到的各个类的质心。(4)迭代(2)~(3步直至新的质心与原质心相等或小于指定阈值,算法结束。本文采用所有样本所属的质心都不再变化时,算法收敛。代码实现本文在实现过程中采用数据集4k2_far.txt,聚类算法实现过程中默认的类别数量为4。(1)辅助函数myUtil.py#-*...
超级简单的数据压缩算法—LZW算法
在字符串算法—数据压缩中,我们介绍了哈夫曼压缩算法(Huffmancompression),本文将介绍LZW算法。 这个算法很简单,为了方便讲述,我们将采用16进制,写代码的时候在把它转回2进制就是了。 在16进制下:A:41;B:42;C:43;D:44;...... 从例子入手: 压缩表是边读数据边建立起来的,一开始,压缩表里的数据为各个字符对应的十六进制值,这里不一一列出,具体可百度26个字母的十六进制。 首先从第一个数据开始读: 第一个字符为A,A在压缩表里已存在,值是41; 下一个字符为B,B在压缩表里已存在,值是42; 前一个字符A与这个字符B结合成AB,给它一个值:81;(为什么是81?因为41~79都被字母用了) 把AB加到压缩表里: 下一个字符为R,R在压缩表里已存在,值是52; 前一个字符B与这个字符R结合成BR,给它一个值:82,加到压缩表中: 下一个字符为A,A在压缩表里已存在,值是41; 前一个字符R与这个字符A结合成RA,给它一个值:83,加到压缩表中: 如此类推,一直到D那里: 下一个字...
十大经典算法总结
Damonare20小时前十大经典算法总结(JavaScript描述)读者自行尝试可以想看源码戳这,博主在github建了个库,欢迎star.读者可以Clone下来本地尝试。此博文配合源码体验更棒哦~~~个人博客:Damonare的个人博客原文地址:十大经典算法总结这世界上总存在着那么一些看似相似但有完全不同的东西,比如雷锋和雷峰塔,小平和小平头,玛丽和马里奥,Java和javascript....当年javascript为了抱Java大腿恬不知耻的让自己变成了Java的干儿子,哦,不是应该是跪舔,毕竟都跟了Java的姓了。可如今,javascript来了个咸鱼翻身,几乎要统治web领域,Nodejs,ReactNative的出现使得javascript在后端和移动端都开始占有了一席之地。可以这么说,在Web的江湖,JavaScript可谓风头无两,已经坐上了头把交椅。在传统的计算机算法和数据结构领域,大多数专业教材和书籍的默认语言都是Java或者C/C++,O’REILLY家倒是出了一本叫做《数据结构与算法javascript描述》的书,但不得不说,不知道是作者吃了shi...
常见的预测算法
常见的预测算法有1.简易平均法,包括几何平均法、算术平均法及加权平均法;2.移动平均法,包括简单移动平均法和加权移动平均法;3,指数平滑法,包括一次指数平滑法和二次指数平滑法,三次指数平滑法;4,线性回归法,包括一元线性回归和二元线性回归,下面我一一的简单介绍一下各种方法。 'i)G7?5Q!R7c:}5x一,简易平均法,是一种简便的时间序列法。是以一定观察期的数据求得平均数,并以所求平均数为基础,预测未来时期的预测值。简易平均法是最简单的定量预测方法。简易平均法的运算过程简单,不需要进行复杂的模型设计和数学运用,常在市场的近期预测、短期预测中使用。1、算术平均法 'I-['{7P$C7G#F"W'D/H9s 算术平均法,就是以观察期数据之和除以求和时使用的数据个数(或资料期数),求得平均数进行预测的方法。 运用算术平均法求平均数,有两种形式:;o%f6d%t)_ (一)以最后一年的每月平均值或数年的每月平均值,作为次年的每月预测值 d#A!B%z!x*N/G1e)W8lC 为了确定合理的误差,用公式估计出预测的标准差。 按公式计算某种可靠程度要...