精华内容
下载资源
问答
  • 最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的。正向最大匹配算法,故思意,从左向右扫描寻找词的最大匹配。首先我们可以规定一个词的最大长度,每次扫描的时候寻找...

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的。

    正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配。

    首先我们可以规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到或者成为单字。

    实例:

    S1="计算语言学课程是三个课时" ,设定最大词长MaxLen = 5  ,S2= " "

    字典中含有三个词:[计算语言学]、[课程]、[课时]

    (1)S2="";S1不为空,从S1左边取出候选子串W="计算语言学";

    (2)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/  ”,        并将W从S1中去掉,此时S1="课程是三个课时";

    (3)S1不为空,于是从S1左边取出候选子串W="课程是三个";

    (4)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是三";

    (5)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是";

    (6)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程"

    (7)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/  课程/  ”,并        将W从S1中去掉,此时S1="是三个课时";

    (8)S1不为空,于是从S1左边取出候选子串W="是三个课时";

    (9)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个课";

    (10)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个";

    (11)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三"

    (12)查词表,W不在词表中,将W最右边一个字去掉,得到W=“是”,这时     W是单字,将W加入到S2中,S2=“计算语言学/  课程/  是/  ”,并将     W从S1中去掉,此时S1="三个课时";

    (13)S1不为空,从S1左边取出候选子串W="三个课时";

    (14)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个课";

    (15)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个";

    (16)查词表,W不在词表中,将W最右边一个字去掉,得到W=“三”,这时     W是单字,将W加入到S2中,S2=“计算语言学/  课程/  是/  三/  ”,并    将W从S1中去掉,此时S1="个课时";

    (17)S1不为空,从S1左边取出候选子串W="个课时";

    (18)查词表,W不在词表中,将W最右边一个字去掉,得到W="个课";

    (19)查词表,W不在词表中,将W最右边一个字去掉,得到W=“个”,     这时W是单字,将W加入到S2中,S2=“计算语言学/  课程/  是/       三/  个/  ",并将W从S1中去掉,此时S1="课时";

    (20)S1不为空,从S1左边取出候选子串W="课时";

    (21)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/  课程/       是/  三/  个/  课时/  ",并将W从S1中去掉,此时S1=""。

    (22)S1为空,输出S2作为分词结果,分词过程结束。

    中文分词算法的Python实现:

    脚本接受两个参数,一个是输入文件的路径,另一个是词典的路径。

    它的运行方法如下:

    python max-match.py

    #!/usr/bin/env python

    import cPickle as pickle

    import sys

    window_size=5

    def max_match_segment(line, dic):

    # write your code here

    chars = line.decode("utf8")

    words = []

    idx = 0

    while idx < len(chars):

    matched = False

    for i in xrange(window_size, 0, -1):

    cand=chars[idx:idx+i].encode("utf8")

    if cand in dic:

    words.append(cand)

    matched = True

    break

    if not matched:

    i = 1

    words.append(chars[idx].encode("utf8"))

    idx += i

    return words

    if __name__=="__main__":

    try:

    fpi=open(sys.argv[1], "r")

    except:

    print >> sys.stderr, "failed to open file"

    sys.exit(1)

    try:

    dic = pickle.load(open(sys.argv[2], "r"))

    except:

    print >> sys.stderr, "failed to load dict %s" % sys.argv[2]

    sys.exit(1)

    try:

    fpo = open("out.txt","w")

    except:

    print >> sys.stderr, "failed to load out.txt"

    sys.exit(1)

    for line in fpi:

    fpo.write("\t".join( max_match_segment(line.strip(), dic) ))

    当然,这只是最基础的,还可以有很多高级的优化,比如说改成Trie树版本的,控制最大词长度的等等。

    在Hadoop上运行基于RMM中文分词算法的MapReduce程序

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

    Mmseg中文分词算法解析

    Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...

    分词 &vert; 双向匹配中文分词算法python实现

    本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...

    【nlp】中文分词基础原则及正向最大匹配法、逆向最大匹配法、双向最大匹配法的分析

    分词算法设计中的几个基本原则: 1.颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”.“公安局 长” ...

    MMSeg中文分词算法

    Java中有一些开源的分词项目,比如:IK.Paoding.MMSEG4J等等.这里主要说的是MMSEG4J中使用的MMSeg算法.它的原文介绍在:http://technology.chtsai.o ...

    中文分词算法工具hanlp源码解析

    词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...

    hanlp源码解析之中文分词算法详解

    词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...

    MMSEG 中文分词算法 翻译

    算法原文位于:http://technology.chtsai.org/mmseg/ http://www.360doc.com/content/13/0217/15/11619026_2661428 ...

    算法:二分查找(python版)

    #!/usr/bin/env python #coding -*- utf:8 -*- #二分查找#时间复杂度O(logn)#一个时间常量O(1)将问题的规模缩小一半,则O(logn) import ...

    随机推荐

    Unity3D设计原则

    原则1:单一职责 原则2:里氏替换原则(子类扩展但不改变父类功能) 原则3:依赖倒置原则 原则4:接口隔离原则 原则5:迪米特法则(最少知道原则) 原则6:开闭原则 原则1:单一职责原则 说到单一职责 ...

    使用git将代码push到osc上

    1.下载git客户端 2.在osc上创建项目 ①使用:git bash here ②在目录下执行:git init ③ssh-keygen -t rsa -C "xqs@gmail.com& ...

    HDU 4049 Tourism Planning(动态规划)

    Tourism Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

    JS代码的加载

    HTML页面中JS的加载原理:在加载HTML页面的时候,当浏览器遇到内嵌的JS代码时会停止处理页面,先执行JS代码,然后再继续解析和渲染页面.同样的情况也发生在外链的JS文件中,浏览器必须先花时间下载 ...

    mac&lpar;osx&rpar; apache无法启动 localhost无法访问服务器&lbrack;&rsqb;

    问题描述:由于删除了/private/var/log下面的日志,导致重启电脑后apache无法正常工作. 删除log的初衷是:当系统用久了,日志文件占据了几十个G的硬盘容量. 造成的后果:重启电脑后a ...

    mybatis缓存创建过程

    带着 上篇 的问题,再来看看mybatis的创建过程 1.从SqlSessionFactoryBuilder解析mybatis-config.xml开始 对文件流解析 XMLConfigBuilder ...

    jquery 中ajax的参数

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

    mvc设计模式的优点

    软件设计的理念是:高内聚,低耦合.采用三层: UI:(jsp,servlet), service:(具体的业务实现), dao:(对数据库的操作) 的设计模式来指导项目开发可以使得项目各层之间是一个粗 ...

    Mac idea 执行testng用例,提示&percnt;MODULE&lowbar;WORKING&lowbar;DIR&percnt;目录不存在解决办法

    idea 下载git代码 执行testng用例,报错: 下午4:47 Error running 'Test.apkStart': Cannot start process, the working ...

    springBoot bean注入

    1.@Component:把普通pojo实例化到spring容器中,相当于配置文件中的 2.@Autow ...

    展开全文
  • 软件算法

    2021-07-06 00:53:14
    要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个软件算法,然后再根据软件算法编写程序。软件算法在现实生活中有很多的运用 ,在不同的领域也会采用不同的软件程序进行计算。随着信息化的...

    要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个软件算法,然后再根据软件算法编写程序。软件算法在现实生活中有很多的运用 ,在不同的领域也会采用不同的软件程序进行计算。随着信息化的不断发展 ,计算机软件算法已经逐渐成为一种最重要的运算模式,近些年来,我国十分重视对计算机软件技术的相关问题探究,同时,在各大高校 ,也不断重视培养相关的计算机软件操作方面的人才 ,并逐步深化软件算法在现实生活中的运用。

    中文名

    软件算法

    外文名

    Software algorithm

    分    类

    计算机设    计

    功    能

    根据软件算法编写程序。

    应    用

    建筑 船舶 金融等多领域

    软件算法简介

    编辑

    语音

    要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个软件算法,然后再根据软件算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。

    算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机软件算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。

    软件算法算法设计

    编辑

    语音

    软件算法迭代法

    迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为3060fc27ddd6178c91a5ad81be554f46.svg ,用某种数学方法导出等价的形式1a6b2002cd21d241183d34fd616d2f37.svg ,然后按以下步骤执行:

    1、选一个方程的近似根,赋给变量df1b580a63b720439fa2588433680d70.svg

    2、将df1b580a63b720439fa2588433680d70.svg 的值保存于变量d496a84ab14d80ac2c0f177be9449faf.svg ,然后计算28f95b013bb190fa582de685eafb7424.svg ,并将结果存于变量df1b580a63b720439fa2588433680d70.svg

    3、当df1b580a63b720439fa2588433680d70.svgd496a84ab14d80ac2c0f177be9449faf.svg 的差的绝对值还小于指定的精度要求时,重复步骤2的计算。

    若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的df1b580a63b720439fa2588433680d70.svg 就认为是方程的根。

    具体使用迭代法求根时应注意以下两种可能发生的情况:

    1、如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制。

    2、 方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。

    软件算法穷举搜索法

    穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。

    对一组数穷尽所有排列,有很直接的方法。将一个排列看作一个长整数,则所有排列对应着一组整数。将这组整数按从小到大的顺序排列排成一个整数,从对应最小的整数开始。按数列的递增顺序逐一列举每个排列对应的每个整数,这能更有效地完成排列的穷举。从一个排列找出对应数列的下一个排列可在当前排列的基础上作部分调整来实现。倘若当前排列为1,2,4,6,5,3,并令其对应的长整数为124653。要寻找比长整数124653更大的排列,可从该排列的最后一个数字顺序向前逐位考察,当发现排列中的某个数字比它前一个数字大时,如本例中的6比它的前一位数字4大,这说明还有对应更大整数的排列。

    穷举搜索法的缺陷是编写的程序通常不能适应变化的情况。

    软件算法递推法

    递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为63719b25aed7e9210356840b816ecdd1.svg 的解,当27057de8cc7d7289aec0e7de547554bc.svg 时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为24819bc18a3d8f200379cc86bd8d47bf.svg 的解后,由问题的递推性质,能从已求得的规模为707c1f1ac53b2fb950a5f84526eca528.svg 的一系列解,构造出问题规模为0ca289a575808a82d9e266fdc162ba71.svg 的解。这样,程序可从f47059f61406d7472e2a6d32e6eac7b0.svg2c619f48f6ebc33e36780fdd3d14a1e2.svg 出发,重复地,由已知至24819bc18a3d8f200379cc86bd8d47bf.svg 规模的解,通过递推,获得规模为0ca289a575808a82d9e266fdc162ba71.svg 的解,直至得到规模为63719b25aed7e9210356840b816ecdd1.svg 的解。

    软件算法递归法

    递归是设计和描述算法的一种有力的工具,它在复杂算法的描述中被经常采用,能采用递归描述的算法通常有这样的特征:为求解规模为63719b25aed7e9210356840b816ecdd1.svg 的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模27057de8cc7d7289aec0e7de547554bc.svg 时,能直接得解。

    递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。

    编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。

    由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。

    软件算法回溯法

    回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。

    在用回溯法求解有关问题的过程中,一般是一边建树,一边遍历该树。一般采用非递归方法。回溯法的非递归算法的一般流程如下:

    在用回溯法求解问题,也即在遍历状态空间树的过程中,如果采用非递归方法,则我们一般要用到栈的数据结构。这时,不仅可以用栈来表示正在遍历的树的结点,而且可以很方便地表示建立孩子结点和回溯过程。例如在组合问题中,我们用一个一维数组Stack[ ]表示栈。开始栈空,则表示了树的根结点。如果元素1进栈,则表示建立并遍历(1)结点;这时如果元素2进栈,则表示建立并遍历(1,2)结点;元素3再进栈,则表示建立并遍历(1,2,3)结点。这时可以判断它满足所有约束条件,是问题的一个解,输出(或保存)。这时只要栈顶元素(3)出栈,即表示从结点(1,2,3)回溯到结点(1,2)。

    软件算法贪婪法

    贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。

    例如平时购物找钱时,为使找回的零钱的硬币数最少,不考虑找零钱的所有各种发表方案,而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使用贪婪法。这种方法在这里总是最优,是因为银行对其发行的硬币种类和硬币面值的巧妙安排。如只有面值分别为1、5和11单位的硬币,而希望找回总额为15单位的硬币。按贪婪算法,应找1个11单位面值的硬币和4个1单位面值的硬币,共找回5个硬币。但最优的解应是3个5单位面值的硬币。

    软件算法应用领域

    编辑

    语音

    软件算法建筑工程

    软件算法目前已经很好的运用于工程建筑领域。许多建筑工程单位利用计算机的软件算法进行相关的成本预算 ,收益预算以及采购预算等。相关的建筑单位可以根据特定的程序,对所采用的数据进行输入,完成输入后,利用统一的程序计算出建筑工程中的相关数据。目前,随着计算机软件算法水平的提高 ,建筑工程领域对软件算法的大量运用 ,很大程度上提高了工程建筑的运作效率。

    软件算法船舶建造

    软件算法在船舶建造领域有着广泛的运用 。在船舶建造过程中,往往通过软件算法进行合理的计算所要使用的材料量,利用软件算法中的贪婪算法,可以最大程度上节省所要运用的建造材料以及资源,减少在船舶建造过程中不必要的资源的浪费。因此可以说,软件算法的广泛运用,在很大程度上解决了船舶建造过程中有关资源浪费的一系列问题。因此,在我国船舶建造过程中一般都会选择软件算法的运用。

    软件算法金融领域

    在金融领域方面利用软件算法,是近些年逐步运用的一种形式。通过软件算法,可以实时的分析出现阶段金融时态的变化过程,以及相关金融数据的掌握,因此软件算法在金融领域的运用逐步深化。现阶段,我国银行业发行的金融 IC 卡全部采用国外芯片和国际通用标准算法(金融社保卡除外),这是软件算法的一种重要的运算形式 ,这种方式方法的运用 ,无疑为我国金融银行领域提供了良好的便利条件与便利基础。

    软件算法资源开发

    软件算法也广泛的运用于资源开发领域过程中 ,资源的高效率的合理开发和利用是近些年来所追求的目标 ,因此 ,对资源的开发与利用 ,利用软件算法进行对开采度等数据的计算 ,可以很好的把握资源的开采程度 ,防止资源开采过度造成资源的枯竭 ,或者资源的开采力度不够 ,不能实现很大的经济效益。因此可以说 ,计算机软件算法在资源开采方面也有很大的利用程度。

    软件算法在多个领域有所运用 ,不仅局限于以上所列举的 3 个领域,软件算法还在医学、道路设计、数学研究等多种领域有所利用和发展 ,近些年来 ,越来越多的软件算法被开发 ,不同的领域运用不同的软件算法进行相关的计算,带来了极大的便利性[1]

    词条图册

    更多图册

    展开全文
  • 算法效率

    2021-07-02 13:52:02
    中文名算法效率外文algorithm efficiency依据程序在计算机上运行消耗时间方法事后统计的方法等类型算法执行时间使用范围计算机程序语言算法效率简介编辑语音算法效率定义算法效率是指算法执行的时间,算法执行时间...

    算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。

    中文名

    算法效率

    外文名

    algorithm efficiency

    依    据

    程序在计算机上运行消耗时间方    法

    事后统计的方法等

    类    型

    算法执行时间

    使用范围

    计算机程序语言

    算法效率简介

    编辑

    语音

    算法效率定义

    算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。在现在的计算机硬件环境中,比较少需要考虑这个问题了,特别是pc机的编程,内存空间越来越大,所以被考虑得也越来越少,不过一个好的程序员,都应该对自己的程序有要求,每一个for比别人少一次判断1000个for就能够少掉很多的运行时间。所以能够理解,能够大概的去运用"效率度量"还是有很大意义的。

    算法效率度量方法

    度量一个程序的执行时间通常有两种方法:(一)事后统计的方法(二)事前分析估算的方法。

    事后统计的方法不利于较大范围内的算法比较(异地,异时,异境)。

    事前分析估算的方法与许多因素有关,包括算法本身选用的策略、问题的规模、书写程序的语言、编译产生的机器代码质量和机器执行指令的速度等。为便于比较算法本身的优劣,应排除其它影响算法效率的因素。从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量。(原操作在所有该问题的算法中都相同)

    度量一个程序运行时间的方式通过时间复杂度和空间复杂度来表征。

    f1efd43e838dc4e51938e9f3728d3241.svg

    上式表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。

    6afccbcf4be4bc550afadbc806c062fd.svg

    上式表示空间复杂度。空间复杂度可以作为算法所需存储空间的量度。若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。原地工作意思是一个算法需要少量的辅助空间,且其大小不随问题规模的大小而改变。如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析[1]

    算法效率算法的最优、最差和平均效率

    最差效率:指当输入规模为n时,算法的最坏情况下的效率。

    最优效率:指当输入规模为n时,算法在最优情况下的效率。

    平均效率:指当输入规模为n时,算法的平均效率。

    大量实践经验告诉我们,我们评价一个算法是应该重点考虑最差效率这一点。

    算法效率提高算法效率的方法

    编辑

    语音

    对数据的逻辑结构进行选择,是构造数学模型一大关键,而算法又是用来解决数学模型的。要使算法效率高,首先必须选好数据的逻辑结构。选择逻辑结构的目的是提高信息的利用效果。在解决问题的过程中,选择合理的逻辑结构是相当重要的环节。

    算法效率选择合理的存储结构

    数据的存储结构,分为顺序存储结构和链式存储结构。顺序存储结构的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;链式存储结构则是借助指示元素存储地址的指针表示数据元素之间的逻辑关系。因为两种存储结构的不同,导致这两种存储结构在具体使用时也分别存在着优点和缺点。 这里有一个较简单的例子:我们需要记录一个n×n的矩阵,矩阵中包含的非0元素为m个。 此时,我们若采用顺序存储结构,就会使用一个n×n的二维数组,将所有数据元素全部记录下来;若采用链式存储结构,则需要使用一个包含m个结点的链表,记录所有非0的m个数据元素。由这样两种不同的记录方式,我们可以通过对数据的不同操作来分析它们的优点和缺点。

    1. 随机访问矩阵中任意元素。由于顺序结构在物理位置上是相邻的,所以可以很容易地获得任意元素的存储地址,其复杂度为O(1);对于链式结构,由于不具备物理位置相邻的特点,所以首先必须对整个链表进行一次遍历,寻找需进行访问的元素的存储地址,其复杂度为O(m)。此时使用顺序结构显然效率更高。

    2. 对所有数据进行遍历。两种存储结构对于这种操作的复杂度是显而易见的,顺序结构的复杂度为O(n2),链式结构为O(m)。由于在一般情况下m要远小于n2,所以此时链式结构的效率要高上许多。除上述两种操作外,对于其它的操作,这两种结构都不存在很明显的优点和缺点,如对链表进行删除或插入操作,在顺序结构中可表示为改变相应位置的数据元素。 既然两种存储结构对于不同的操作,其效率存在较大的差异,那么我们在确定存储结构时,必须仔细分析算法中操作的需要,合理地选择一种能够“扬长避短”的存储结构。

    存储结构的选择包括以下两种。

    一、合理采用顺序存储结构。我们在平常做题时,大多都是使用顺序存储结构对数据进行存储。究其原因,一方面是出于顺序结构操作方便的考虑,另一方面是在程序实现的过程中,使用顺序结构相对于链式结构更便于对程序进行调试和查找错误。因此,大多数人习惯上认为,能够使用顺序结构进行存储的问题,最“好”采用顺序存储结构。其实,这个所谓的“好”只是一个相对的标准,是建立在以下两个前提条件之下的:

    1. 链式结构存储的结点与顺序结构存储的结点数目相差不大。这种情况下,由于存储的结点数目比较接近,使用链式结构完全不能体现出记录结点少的优点,并且可能会由于指针操作较慢而降低算法的效率。更有甚者,由于指针自身占用的空间较大,且结点数目较多,因而算法对空间的要求可能根本无法得到满足。

    2. 并非算法效率的瓶颈所在。由于不是算法最费时间的地方,这里是否进行改进,显然是不会对整个算法构成太大影响的,若使用链式结构反而会显得操作过于繁琐。

    二、必要时采用链式存储结构。

    由于链式结构中指针操作确实较繁琐,并且速度也较慢,调试也不方便,因而大家一般都不太愿意用链式的存储结构。但是,这只是一般的观点,当链式结构确实对算法有很大改进时,我们还是不得不进行考虑的。

    然而,如果我们采用的是链式存储结构,那么我们需要多少数据,就只会遍历多少数据,这样不仅充分发挥了链式存储结构的优点,而且由于不需单独对某一个数据进行提取,每次都是对所有数据进行判断,从而避免了链式结构的最大缺点。我们使用链式存储结构,虽然没有降低问题的时间复杂度(链式存储结构在最坏情况下的存储量与顺序存储结构的存储量几乎相同),但由于体现了前文所述选择存储结构时扬长避短的原则,因而算法的效率也大为提高。我们选择链式的存储结构,虽然操作上可能稍复杂一些,但由于改进了算法的瓶颈,算法的效率自然也今非昔比。由此可见,必要时选择链式结构这一方法,其效果是不容忽视的。[2]

    算法效率使用直接初始化

    与直接初始化对应的是复制初始化,什么是直接初始化?什么又是复制初始化?举个简单的例子,

    ClassTest ct1;

    ClassTest ct2(ct1);    //直接初始化

    ClassTest ct3 = ct1;    //复制初始化

    那么直接初始化与复制初始化又有什么不同呢?直接初始化是直接以一个对象来构造另一个对象,如用ct1来构造ct2,复制初始化是先构造一个对象,再把另一个对象值复制给这个对象,如先构造一个对象ct3,再把ct1中的成员变量的值复制给ct3,从这里,可以看出直接初始化的效率更高一点,而且使用直接初始化还是一个好处,就是对于不能进行复制操作的对象,如流对象,是不能使用赋值初始化的,只能进行直接初始化。可能我说得不太清楚,那么下面就引用一下经典吧!

    以下是Primer是的原话:

    “当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象”,还有一段这样说,“通常直接初始化和复制初始化仅在低级别优化上存在差异,然而,对于不支持复制的类型,或者使用非explicit构造函数的时候,它们有本质区别:

    ifstream file1("filename")://ok:direct initialization

    ifstream file2 = "filename";//error:copy constructor is private

    算法效率尽量减少值传递,多用引用来传递参数。

    如果参数是int等语言自定义的类型可能能性能的影响还不是很大,但是如果参数是一个类的对象,那么其效率问题就不言而喻了。例如一个判断两个字符串是否相等的函数,其声明如下:

    bool Compare(string s1, string s2)

    bool Compare(string *s1, string *s2)

    bool Compare(string &s1, string &s2)

    bool Compare(const string &s1, const string &s2)

    其中若使用第一个函数(值传递),则在参数传递和函数返回时,需要调用string的构造函数和析构函数两次(即共多调用了四个函数),而其他的三个函数(指针传递和引用传递)则不需要调用这四个函数。因为指针和引用都不会创建新的对象。如果一个构造一个对象和析构一个对象的开销是庞大的,这就是会效率造成一定的影响。

    然而在很多人的眼中,指针是一个恶梦,使用指针就意味着错误,那么就使用引用吧!它与使用普通值传递一样方便直观,同时具有指针传递的高效和能力。因为引用是一个变量的别名,对其操作等同于对实际对象操作,所以当你确定在你的函数是不会或不需要变量参数的值时,就大胆地在声明的前面加上一个const吧,就如最后的一个函数声明一样。

    同时加上一个const还有一个好处,就是可以对常量进行引用,若不加上const修饰符,引用是不能引用常量的。[2]

    算法效率减少除法运算的使用

    无论是整数还是浮点数运算,除法都是一件运算速度很慢的指令,在计算机中实现除法是比较复杂的。所以要减少除法运算的次数,下面介绍一些简单方法来提高效率:

    1、通过数学的方法,把除法变为乘法运算,如if(a > b/c),如果a、b、c都是正数,则可写成if(a*c > b)

    2、让编译器有优化的余地,如里你要做的运算是int型的n/8的话,写成(unsigned)n/8有利于编译器的优化。而要让编译器有优化的余地,则除数必须为常数,而这也可以用const修饰一个变量来达到目的。

    算法效率避免使用多重继承

    在C++中,支持多继承,即一个子类可以有多个父类。书上都会告诉我们,多重继承的复杂性和使用的困难,并告诫我们不要轻易使用多重继承。其实多重继承并不仅仅使程序和代码变得更加复杂,还会影响程序的运行效率。

    这是因为在C++中每个对象都有一个this指针指向对象本身,而C++中类对成员变量的使用是通过this的地址加偏移量来计算的,而在多重继承的情况下,这个计算会变量更加复杂,从而降低程序的运行效率。而为了解决二义性,而使用虚基类的多重继承对效率的影响更为严重,因为其继承关系更加复杂和成员变量所属的父类关系更加复杂。[3]

    算法效率将小粒度函数声明为内联函数

    调用函数是需要保护现场,为局部变量分配内存,函数结束后还要恢复现场等开销,而内联函数则是把它的代码直接写到调用函数处,所以不需要这些开销,但会使程序的源代码长度变大。

    所以若是小粒度的函数,如下面的Max函数,由于不需要调用普通函数的开销,所以可以提高程序的效率。

    int Max(int a, int b)

    {

    return a>b?a:b;

    }参考资料

    1.

    算法效率的度量和存储空间需求

    .豆丁网[引用日期2017-06-08]

    2.

    马克·艾伦·维斯.数据结构与算法分析:机械工业出版社,2016

    3.

    Anany Levitin.算法效率分析基础:清华大学出版社,2015

    展开全文
  • 基础算法

    2021-07-22 00:36:20
    算法是一个程序和软件的灵魂,要成为一优秀的程序员,只有对基础算法全面掌握,才能在设计程序和编写代码的过程中显得得心应手。...中文名基础算法外文fundamentalalgorithm应用学科计算机科学包...

    算法是一个程序和软件的灵魂,要成为一名优秀的程序员,只有对基础算法全面掌握,才能在设计程序和编写代码的过程中显得得心应手。常用的基础算法有快速排序算法、堆排序算法、归并排序、二分查找算法、BFPRT(线性查找算法)、DFS(深度优先搜索)、BFS(广度优先搜索)、Dijkstra算法、动态规划算法、朴素贝叶斯分类算法。

    中文名

    基础算法

    外文名

    fundamentalalgorithm

    应用学科

    计算机科学包    含

    快速排序算法、堆排序算法等

    适合领域范围

    C/C++/java等

    性能指标

    平均时间复杂度

    基础算法快速排序算法

    编辑

    语音

    c0bd3cb660315582c21c33b1f7c1cb51.gif

    快速排序算法快速排序是由东尼.霍尔所发展的一种排序算法,算法步骤如下:

    1. 从数列中挑出一个元素,称为“基准”。

    2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。

    3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

    递归的最底部情形,是数列的大小是0或1,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。因此,在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。

    基础算法堆排序算法

    编辑

    语音

    b516e11a5c91fff58b4cf7e2fcc206c3.gif

    堆排序算法堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法步骤如下:

    1. 创建一个堆H[0..n-1];2. 把堆首(最大值)和堆尾互换;

    3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置;

    4.重复步骤2,直到堆的尺寸为1。

    堆排序的平均时间复杂度为Ο(nlogn) 。

    基础算法归并排序

    编辑

    语音

    6b7d1cd4038400e82a710484210748af.gif

    归并排序归并排序(Mergesort),又称合并排序,是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。算法步骤如下:

    1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

    2.设定两个指针,最初位置分别为两个已经排序序列的起始位置;

    3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

    4.重复步骤3直到某一指针达到序列尾;

    5.将另一序列剩下的所有元素直接复制到合并序列尾。

    归并排序的平均时间复杂度为Ο(nlogn) 。

    基础算法二分查找算法

    编辑

    语音

    d71581e529b0258c905fa76985334e26.png

    二分查找算法二分查找算法,也称二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。算法步骤如下:

    1. 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;

    2. 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找返回步骤1;

    3. 如果在某一步骤数组为空,则代表找不到。

    这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,二分查找算法的时间复杂度为Ο(logn) 。

    基础算法BFPRT(线性查找算法)

    编辑

    语音

    BFPRT算法又称中位数的中位数算法,由Blum、Floyd、Pratt、Rivest、Tarj提出,并以他们的名字命名。该算法的思想与快速排序思想相似,通过修改快速选择算法的主元选取方法,提高算法在最坏情况下的时间复杂度,适用于解决为从某n个元素的序列中选出第k大(第k小)的元素的问题。具体算法步骤如下:

    1.将n个元素每5个一组,分成n/5(上界)组。

    2.取出每一组的中位数,任意排序方法,比如插入排序。

    3.递归的调用selection算法查找上一步中所有中位数的中位数,设为x,偶数个中位数的情况下设定为选取中间小的一个。

    4.用x来分割数组,设小于等于x的个数为k,大于x的个数即为n-k。

    5.若i==k,返回x;若ik,在大于x的元素中递归查找第i-k小的元素。

    终止条件是:n=1时,返回的即是i小元素。

    BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法在最坏情况下,依然能达到o(n)的时间复杂度。

    基础算法DFS(深度优先搜索)

    编辑

    语音

    efe44e20d5dcf25f1f36b6a1da6cd764.png

    DFS(深度优先搜索)深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它的基本思想是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。算法步骤如下:

    1.访问顶点v;

    2.依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

    3.若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

    深度优先搜索属于盲目搜索,是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。

    基础算法BFS(广度优先搜索)

    编辑

    语音

    6da0df38a3b1568934f38d472d208e81.gif

    BFS(广度优先搜索)广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。它的基本思想是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。算法步骤如下:

    1.首先将根节点放入队列中。

    2.从队列中取出第一个节点,并检验它是否为目标。如果找到目标,则结束搜寻并回传结果;否则将它所有尚未检验过的直接子节点加入队列中。

    3.若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。

    4.重复步骤2。

    BFS同样属于盲目搜索。一般用队列数据结构来辅助实现BFS算法。

    基础算法Dijkstra算法

    编辑

    语音

    0255be590e840aab485f955bc453bfc8.gif

    Dijkstra算法戴克斯特拉算法(Dijkstra’salgorithm)是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。

    9409cd6b9e9110bac4f595a5b74a9ae9.svg该算法的输入包含了一个有权重的有向图G,以及G中的一个来源顶点S。V表示G中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u,v)表示从顶点u到v有路径相连。E表示G中所有边的集合,而边的权重则由权重函数w:E→[0, ]定义。因此,w(u,v)就是从顶点u到顶点v的非负权重。边的权重可以想像成两个顶点之间的距离。任两点间路径的权重,就是该路径上所有边的权重总和。算法步骤如下:1.初始时令S={V0},T={其余顶点},T中顶点对应的距离值。若存在,d(V0,Vi)为弧上的权值;若不存在,d(V0,Vi)为9409cd6b9e9110bac4f595a5b74a9ae9.svg

    2.从T中选取一个其距离值为最小的顶点W且不在S中,加入S。

    3. 对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值缩短,则修改此距离值。

    4. 重复上述步骤2、3,直到S中包含所有顶点,即W=Vi为止。

    已知有V中有顶点s及t,Dijkstra算法可以找到s到t的最低权重路径(例如,最短路径),也可以在一个图中,找到从一个顶点s到任何其他顶点的最短路径。对于不含负权的有向图,Dijkstra算法是已知的最快的单源最短路径算法。该算法常用于路由算法或者作为其他图算法的一个子模块。Dijkstra算法的复杂度为n^2。

    基础算法动态规划算法

    编辑

    语音

    动态规划(Dynamicprogramming)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。它的基本思想是:给定一个问题,通过解其不同部分(即子问题),然后合并子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量。 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个 子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。

    1.最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。

    2.子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。 动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

    动态规划动态规划常常适用于有重叠子问题和最优子结构性质的问题,最经典的问题是背包问题。动态规划方法所耗时间往往远少于朴素解法。

    基础算法朴素贝叶斯分类算法

    编辑

    语音

    朴素贝叶斯分类算法是一种基于贝叶斯定理的简单概率分类算法。贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下,如何完成推理和决策任务。概率推理是与确定性推理相对应的。而朴素贝叶斯分类器是基于独立假设的,即假设样本每个特征与其他特征都不相关。

    朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法,换言之朴素贝叶斯模型能工作并没有用到贝叶斯概率或者任何贝叶斯模型。

    尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够取得相当好的效果。[1]

    词条图册

    更多图册

    参考资料

    1.

    程序员必须知道的10大基础实用算法及其讲解

    .开源中国[引用日期2017-04-13]

    展开全文
  • 本文将算法工程师所需的技能进行拆分,带你了解掌握哪些技能才能算是一合格的算法工程师。成为一合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能力,这些能力中的每一项掌握起来都...
  • 生成树算法

    2021-06-28 09:03:04
    在图论的数学领域中,如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树(SpanningTree)。生成树是连通图的包含图中的所有顶点的极小连通子图...中文名生成树算法外文Spanning tree algorit...
  • 算法逻辑

    2021-07-30 03:17:53
    算法可以理解为由基本运算及规定的运算顺序所构成的...中文名算法逻辑外文Algorithm logic分类计算机 编程基本结构顺序 选择 循环常用流程图优势简洁特点只有一个出口和入口算法逻辑简介编辑语音算法可以理解为...
  • 中文名:时钟置换算法 以下是作者对CLOCK算法的肤浅见解,如有错误之处,欢迎指出,十分感谢! 定义 时钟置换算法可以认为是一种最近未使用算法,即逐出的页面都是最近没有使用的那个。它和LRU算法有类似之处,只...
  • 算法思想无处不在,在计算机科学和其他领域中的体现都很明显。因特网路由标准的一些 主要变化,可以看成是人们对一种最短路径算法的不足和另一种算法的相对优势的争论。生物学家用于表示基因和基因组之间相似性的...
  • 这里所说的算法指的是常见的数据处理算法(国际/国标通用的那种),大致可分为:对称加解密算法、非对称加解密算法、信息摘要算法。下文将对这几类算法做一个对比和总结。 2 对称加解密算法 对称
  • 磁盘调度算法

    千次阅读 2021-05-25 06:15:20
    因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:[1]先来先服务算法(FCFS),最短寻道时间优先算法(SSTF),扫描算法(SCAN),循环扫描算法(CSCAN)中文名磁盘调度算法类型算法分类计算机...
  • 解决sql语句报黄的问题 8.zip解压缩中文文件名乱码 解决方法:加 -O cp936参数 如:unzip -O cp936 eat_pyspark_in_10_days.zip 后续,不定期更新中~~~ 注:博客园该文章已断更,后续在此文章中继续更新。...
  • FIFO调度算法

    2021-06-07 15:01:24
    中文名:先进先出调度算法 定义: 一种缓存调度算法,经常用作内存的页面置换算法。FIFO算法是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中停留时间最久的页面予以淘汰。该算法实现简单,...
  • 布斯乘法算法

    2021-07-27 07:49:17
    布斯乘法算法是计算机中一种利用数的2的补码形式来计算乘法的算法。该算法由安德鲁·唐纳德·布斯于1950 年发明,当时他在...中文名布斯乘法算法外文Booth's multiplication algorithm发明人安德鲁·唐纳德·布斯...
  • 算法

    2021-07-17 06:09:16
    [1]中文名算法级外文algorithm level拼音suàn fǎ jí属性系统级以下作用在结构上描述子系统的模块组成应用学科计算机算法级概述编辑语音图1 “运算步”进行计算系统级以下是算法级。在这一层次上,行为描述的是...
  • 枚举算法

    2021-07-27 08:31:42
    枚举算法是我们在日常中使用到的最多的一个算法,它的...中文名枚举算法外文enum表达式enum 枚举{ 枚举值表 };应用学科计算机算法枚举算法概述编辑语音枚举算法简单粗暴,他暴力的枚举所有可能,尽可能地尝试所...
  • 递归运算法

    2021-06-27 04:18:06
    中文名递归运算法外文Recursive Arithmetic递归运算法摘要编辑语音图片递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。。递归算法是把问...
  • Stacking算法讲解

    2020-12-21 17:25:32
    这里写自定义目录标题 stacking算法作为kaggle上常用的一种算法,个人在网上查看了很多博客,都没有彻底明白,最近在知乎上找到了一篇讲解很清楚的stacking算法。 https://zhuanlan.zhihu.com/p/25836678 ...
  • 自学算法

    2021-05-19 17:28:21
    咱们来一起学习算法啦。这套课程特别适合自学算法的小白。每节课程最后还有一道练习题,边学边练,可以帮你及时巩固学习到的知识。 如果您在学习其他相关的算法课程,也可以学习该课程用来巩固知识点。 本教程中的...
  • 这学期我们开设了算法设计与分析这堂课,出于对这位大佬博导的喜爱和对算法的兴趣,我打算写一系列的博文来记录我的一个学习过程,博主在重要的部分录了音,将十分详细地还原授课内容,力求将大佬的思想和方法讲透彻...
  • 机器学习必学十大算法

    千次阅读 2021-10-03 01:08:08
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文介绍了 10 大常用机器学习算法,包括线性回归、Logistic 回归、线性判别分析、朴素贝叶斯、KNN、随机森林...
  • 区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地作者:于中阳Mercina-zy本文发表自区块链兄弟著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处...ZUC 算法,即祖冲之算...
  • 返回值 算法对应的函数(形参列表) { 临时变量的定义 实现由输入参数到输出参数的操作 函数体 其中,.'返回值”通常为bool类型,表示算法是否成功执行;“形参列表”表示算法的参数,由 于算法包含输入和输出...
  • LRU调度算法

    2021-06-07 15:48:32
    中文名:最近最久未使用调度算法 定义 什么是LRU? 它是按照一个非常著名的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经很久没有使用的页面很有可能在未来较长的一段时间内...
  • 古人云:赐子千金,不如赐子一艺!赐子一艺,不如赐子一
  • 迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。
  • 答:处理机调度算法有:先来先服务(FCFS)调度算法,短作业(进程)优先调度算法SJ(P)F,高优先权优先(FPF)调度算法和基于时间片的轮转调度算法。 各算法的优点: FCFS调度算法比较有利于长作业(进程); 相较...
  • EM算法

    2021-05-23 05:33:40
    经常有人谈到它就是"鸡生蛋,蛋生鸡"的解法,这个很通俗,但是只了解到这一层,是远不够的……EM算法的全名是Expectation Maximization,中文名叫期望最大化算法。它是一个在含有隐变量的模型中常用的算法,在最大...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,833
精华内容 55,533
关键字:

中文算法名