精华内容
下载资源
问答
  • 编程语言实现算法

    万次阅读 2018-07-19 20:23:04
    在程序与算法课程中,给出了计算长方形面积算法的伪代码,伪代码比较直观地描述了算法的执行过程,但它不能在计算机上直接运行,需要把伪代码一种编程语言转换为程序。本篇和同学们探讨如何编程语言来实现算法...

    课程导言

    【用流程图描述算法,可以与用户更好地交流。如果需要算法在计算上运行,就需要把算法用编程语言编写为程序。在程序与算法课程中,给出了计算长方形面积算法的伪代码,伪代码比较直观地描述了算法的执行过程,但它不能在计算机上直接运行,需要把伪代码用一种编程语言转换为程序。本篇和同学们探讨如何用编程语言来实现算法以及编程语言的发展过程。通过本篇的学习,你将了解到编程语言是如何由二进制语言逐步发展为高级语言的,以及用Java语言如何实现计算长方形面积的算法。】

     

    语言是人类交流的工具,是人们沟通的主要表达方式。不同的民族有不同的语言,每种语言有自己的语法规则和词汇,只有在规定的语法规则和词汇范围内,人们才可以相互理解之间的对话和语句文字要表达的内容。超出这个范围,就会出现语言理解困难现象,例如:不同语言之间的人对话就会发生理解问题,就需要翻译人员的协助才能完成正常交流。

    编程语言是人类与计算机的交流工具,为了让计算机能够准确无误地完成任务,人们需要使用计算机能够读懂的语言与之交流,编制任务指令交给计算机,计算机才能够按部就班地执行指令,完成人们交给的任务,编写计算机指令的语言就是编程语言。

    编程语言和人类语言一样,不是先天就有的,是随着科技和计算机技术的发展,人们为了更好地控制计算机,帮助人们完成更多任务,提高编程和工作效率而不断对语言进行创新、完善和改进而来的。最初的编程语言是机器语言,也是计算机唯一能直接读懂的语言。计算机只能识别二进制代码,所以机器指令也是由二进制代码组成的,所谓的机器语言,就是直接用二进制代码编写计算机的指令序列(程序)。

    假设编写一个计算直线方程的程序,给出方程的斜率、变量系数和变量X的值,求Y值,将计算结果存储到以Y为地址的存储单元中。

    直线方程为 Y = AX + B,其中A、X、B已经分别存储到A、X、B存储单元,机器指令可以直接寻址到该存储单元。A单元的存储地址为26H,X的存储地址为34H,B的存储地址为36H,Y的存储地址为56H,其中26H、34H、36H、56H均为16进制,该算法流程图见下图。 

     

    0099.png

     

    图1 计算直线方程流程图

    根据流程图编写的机器指令序列(参考了IBM-PC指令集,可能有出入,主要是为了说明编程语言的演变过程):

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    11011  AX  26H     

    存取指令,读取指定地址26H的存储内容到AX寄存器;

    21001  34H

    乘法指令,将34H存储地址的内容与AX寄存器内容相乘;

    31011  26H  AX

    存取指令,将AX寄存器内容存储到26H地址的存储单元;

    41011  AX  36H

    存取指令,读取指定地址36H的存储内容到AX寄存器;

    50011  AX  26H

    加法指令,将AX寄存器内容和26H地址存储内容相加;

    61011  56H  AX

    存取指令,将AX寄存器内容存储到56H地址的存储单元。

    上面就是用机器语言编写的计算直线方程的计算机指令序列,是不是特别难记、难懂,完全是看天书的感觉。为了提高编程的工作效率,在1949年,人们将助记符和机器代码关联起来,并编写了转换程序,转换程序可以把助记符转换为机器代码,这就是汇编语言。

    根据流程图编写的汇编程序指令序列(参考了IBM-PC指令集,可能有出入,主要是为了说明编程语言的演变过程):

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    (1)    MOV  AX  A

    存取指令,读取A地址的存储内容到AX寄存器;

    (2)    IMUL  X

    乘法指令,将X存储地址的内容与AX寄存器内容相乘;

    (3)    MOV  A   AX

    存取指令,将AX寄存器内容存储到A地址的存储单元;

    (4)    MOV  AX  B

    存取指令,将B地址的存储内容读取到AX寄存器;

    (5)    ADD  AX  A

    加法指令,将AX寄存器内容和A地址存储内容相加;

    (6)    MOV   Y  AX

    加法指令,将AX寄存器内容存储到Y地址的存储单元;

    用助记符代替了机器码,编程是不是相对简单了一些,转换程序可以帮助编程人员从繁重的机器码编写劳动中解脱出来,转换程序也称之为汇编编译程序,其工作原理如下图所示: 

     

     blob.png

    图2 汇编编译程序原理图

    汇编代码完成后,需要运行编译程序,将汇编代码转换为机器代码。由于不同CPU架构的计算机,其提供的指令集不同,支持运行的机器代码也不同,因此,要运行在不同CPU架构的计算机上,就需要运行支持该CPU架构的汇编编译程序。例如IBM-PC机采用了Intel  X86系列处理器,单片机一般采用ARM架构的系列处理器,如果要让编写的汇编程序运行在IBM-PC机上,就需要调用支持IBM-PC指令集的汇编编译程序,如果要让编写的汇编程序运行在ARM架构的计算机上,就需要调用支持ARM指令集的汇编编译程序。

    汇编语言相对机器语言来说,编程效率和可读性都有了较大提高。但编写程序还是过于繁琐,并且汇编语言对应一条条指令集,当指令集改变时,就得修改相应汇编语言,导致其可移植性和维护性很差,不能跨平台使用。为了解决这个问题,计算机工程师们继续创新和改进编程语言,随着计算机技术和科技的发展,计算机对语言的处理能力进一步提高,计算机工程师试图用人们能够容易识别和易懂的语言去编写程序,在20世纪50年代,出现了第一批高级语言,包括FORTRAN 、LISP、COBOL等语言,随后相继出现了C语言、C#、Java、PHP、Perl等高级语言。

    高级语言的优点是其语法和结构更类似汉字或者普通英文,并且由于远离对硬件的直接操作,使得一般人经过学习之后都可以掌握编程技术。

    ●  根据计算直线方程流程图编写的C语言程序:

    1

    2

    3

    4

    5

    void  line(double a,double,x,double y)

    {

         a = ax;

    y = a + b;

    }

    ●  根据计算直线方程流程图编写的Java程序:

    1

    2

    3

    4

    5

    6

    7

    8

    public  class  LineQuation 

    {

    void  line(double a,double,x,double y)

    {

    a = ax;

    y = a + b;

    }

    }

    Java语言和C语言都属于高级语言,其语法和规则有相同之处,但也有很大的不同,Java是面向对象的语言,C语言是函数式语言,Java是编译兼解释性语言,C语言是编译性语言,关于语言的特性后面会有陆续介绍。

    我们写程序用的是高级语言,要让我们写好的程序能够在计算机上运行,就必须要把高级语言转换成计算机能够理解的机器语言,该转换程序称为该语言的编译程序,例如C语言的转换程序可以称之为C语言编译程序,C语言编写的程序编译为Windows程序的工作过如下图所示:

    blob.png

     图3 编译性语言编译过程

    编写完成的C语言源代码,首先经过编译预处理器规范代码和预编译,然后通过编译器转换为汇编代码,再由汇编器转换为机器代码,最后由链接器将有关的机器代码文件进行相互链接,构建Windows程序。

    Java语言编写的程序编译为Windows程序的工作过如图3-11所示,Java代码是文本文件,可以用记事本等文本编辑器直接编辑Java文件。代码编写完成后运行Java编译器,将Java源代码文件编译为class文件(字节码文件),JVM(Java虚拟机)的类装载器加载class文件,由解释器解释执行。

    blob.png

    图4 Java语言编译过程

    程序与算法课程中,给出了计算长方形面积算法的伪代码,下面给出用Java编程语言实现算法的代码,算法的流程图参见用流程图描述算法一课。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    import java.util.Scanner;

    public class RectangularArea {

        public static void main(String[] args) {

            // TODO Auto-generated method stub

            //声明num1、num2变量

            int num1,num2;

            //声明Scanner变量,并用new运算符实例化Scanner

             Scanner sc = new Scanner(System.in);

             //提示用户输入长方形长度

             System.out.println("请输入长方形的长度");   

            //调用Scanner方法nextInt()获取用户输入

             num1 = sc.nextInt();

             //提示用户输入长方形宽度

             System.out.println("请输入长方形的宽度");   

            //调用Scanner方法nextInt()获取用户输入

             num2 = sc.nextInt();

             //判断num1和num2是否小于0,如果小于零提示用户并退出程序

             if( num1 <=0 || num2 <=0 )

             {

              System.out.println("输入的长度和宽度不能小于0");

              //退出程序

              System.exit(0);

             }

            //计算num1和num2的乘积

             int result = num1 * num2;

             //输出长方形的面积

             System.out.printf("长方形的面积为:%d",result);

        }

    }

    编程语言是人们与计算机的交流工具,各种编程语言语法规则虽有不同,但其核心思想都是人们通过编程语言来控制计算机,让计算机帮助人们解决各类问题。学习编程语言的目的是掌握利用计算机解决问题的能力,包括分析问题、算法设计、数据架构等能力,有了这些能力,只要学会一种编程语言,其它语言都可以无师自通。

     

    课程小结

    1、明确了解决问题的算法,也用流程图绘制了算法的详细步骤,下一步就要用编程语言将算法编写为程序。最早的编程语言是二进制语言,也是计算机唯一能识别的语言,就是用0和1两个数字写出的代码,计算机能够识别二进制语言,是因为计算机的指令就是用二进制来描述的,关于二进制的概念后面的课程会有讲述。

    2、二进制语言都是0和1,代码晦涩难懂。假设现在让编程人员用二进制语言编写程序,估计都要疯掉。好在现在有Java、C#、python等高级语言了,写的代码类似英语,简单易懂。从二进制语言到高级语言也是逐步发展的过程,为了摆脱繁重的二进制编程劳动,提高编程效率,编程语言专家在二进制语言的基础上发明了汇编语言,汇编语言用助记符表示计算机指令,例如,用add表示两数相加指令。用的加法指令时,就可以直接使用add,而不必写一长串0和1的数字了。后来,人们又在汇编语言的基础上发明了高级语言,高级语言已经接近于人们可以直接理解的语言了。

    思考与练习

    1、请简要叙述高级语言、汇编语言、机器语言的区别。

    2、相对二进制语言来说,汇编语言的助记符为什么能提高编程效率?

    3、Java编译器的作用什么?

    展开全文
  • 算法描述语言ADL

    千次阅读 2020-12-05 12:39:40
    用算法描述语言ADL书写算法的格式及规定如下: 算法<算法名>(变量i1,···,变量in.变量j,···,变量jn) // <算法的概括说明>或者/* <算法的概括说明> */ <步骤名>.[<本步骤的概括...

    用算法描述语言ADL书写算法的格式及规定如下:

    算法<算法名>(变量i1,···,变量in.变量j,···,变量jn)
          // <算法的概括说明>或者/* <算法的概括说明> */
       <步骤名>.[<本步骤的概括说明>]
                <操作1>//<操作1的解释>或者/*<操作1的解释>*/
                       或者(操作1的解释)或者<无解释>
                 ···
                 <操作J1> // <操作J1的解释>或者/* <操作J1的解释> */
                          或者(操作J1的解释)或者<无解释>
         ···
       <步骤名>.[<本步骤的概括说明>]
                 <操作1> //<操作1的解释>或者/*<操作1的解释>*/
                         或者(操作1的解释)或者<无解释>
                 ···
    		     <操作Jk> // <操作Jk的解释>或者/* <操作Jk的解释> */
                          或者(操作Jk的解释)或者<无解释>▎
    

    下面是对上述书写格式给出具体解释:

    (1)关于“<算法名>(变量i1,···,变量in.变量j,···,变量jn)”的解释

     <算法名>是由字母和数字组成的有限字符串,并且字符串中的第一个符号必须是字母。
     在变量表中,变量ik为输入变量.1≤k≤m,m≥0,当m=O时.表示无输入变量;变量jk为输出变量,1≤k≤n,n≥1。
    

    (2)关于<算法的概括说明>的解释

       在算法的变量表后对整个算法进行概括说明,说明中应包含算法的主要思想,对算法功能和其变量的解释等。
    

    (3)关于算法步骤的解释

     算法的每一步骤都要有步骤名,步骤名由<算法名或算法名缩写><数字>组成。
     步骤名后面的方括号内是对该步骤所执行操作的高度概括。
     方括号后是本步骤的一系列操作,每个操作由ADL语句给出,若某操作难于理解则需在其后对其做出解释。
    

    (4)关于符号“ ▎”的解释

     每个算法都需要用符号“ ▎”表示其被书写完毕,也就是说,符号“ ▎”作为对应算法被书写完毕的结束符。
     注意算法不一定在符号“I”处运行结束。
    

    (5) 可使用的算术运算符

     +、-、*、x、/、DIV、MOD、L」(取地板运算,如Lx」的值是小于等于x的最大整数)、
     「](取天棚运算,如「x]的值是大于等于x的最小整数).....
    

    (6)关系、逻辑运算符、逻辑常量、集合运算符

     可用的关系运算符(=、≠、<、>、≥、≤)逻辑运算符(AND OR NOT),逻排常量(true,false).集合运算符(∩、U、一(差)...)。
    

    (7)结束符

     通常每条语句(或每个操作)都用".”作为结束符,但在能判断语句结束的位置可略去“.”。
    

    (8)关于注释语句

    注释语句有以下3种形式:
     1.较短的注释语句(注释内容不超过一行)用符号“//”开头,后面是具体注释的内容。
     2.较长的注释语句用符号“/*”开头,中间是具体注释的内容,用符号“*/”结尾。
     3.注释语句用左小括号“("开头,中间是具体的注释或说明内容,用右小括号“)”结尾。
    

    (9)关于赋值语句

     形如a←b,其中a是变量,b是表达式或变量;
     a↔b表示交换变量a和变量b的内容;
     a←b←c,表示既将c的值赋给变量a,又将其值赋给变量b。
    

    (10)关于条件语句

    1.IF(或如果,或若)<逻辑表达式> THEN(或“,则”)(语句...语句m).
    2.IF(或如果,或若)<逻辑表达式>
    	THEN(或“,则")(语句...语句m).
    	ELSE(或“;否则”)(语句...语句n).
    其中m,n≥1。
    3.CASE DO
    		(<逻辑表达式 1>:(语句1...语句n).
    		       ···
    		<逻辑表达式m>:(语句...语句nm )).
    其中,n≥1,m≥1,1≤i≤m。
    

    (11)关于循环语句

    	1.WHILE<逻辑表达式>DO(语句1. ..语句n).
    其中,n≥1。
    	2.FOR<变量>=<算术表达式1> T0<算术表达式2>STEP<算术表达式3>
    				DO(语句1. ... 语句n).
    其中,n≥1。若<算术表达式3>=1,则“STEP<算术表达式3>"可略去。
    	3.FOR V<变量>∈<集合> DO (语句...语句n).路
    其中,n≥1。
    

    (12)关于转移语句

    	GOTO<步骤名>.
    

    (13)关于EXIT语句

    		可用在通常的结束条件满足之前,用来结束WHILE或FOR循环的执行。
    		EXIT语句使得程序转移到紧接在包含EXIT的(最内层的)WHILE或者FOR循环后面的第一个语句。
    

    (14)关于RETURN语句

    RETURN语句有两种表达形式:
    	RETURN
    或
    	RETURN<表达式>
    第一种表达形式表示没有返回值,直接返回;第二种表达形式表示返回表达式的值,并返回。
    若算法在紧邻符号“ ▎”的操作处结束,RETURN语句通常被省略。
    

    (15)关于圆括号

    当且仅当圆括号中只有1条语句时,圆括号可以省略。
    

    (16)关于输人、输出语句

    输人语句为
    	READ(x)
    表示读取输人值赋给变量x。
    输出语句为
    	PRINT( <表达式>)
    或
    	PRINT<字符串常量>
    
    展开全文
  • 本次仅展示简单的使用R语言实现kmeans算法和基于密度的算法 首先是基于密度的R语言脚本:

    使用R语言实现聚类算法

    本次仅展示简单的使用R语言实现kmeans算法和基于密度的算法:

    首先是基于密度的R语言脚本:

    >library(cluster)
    >library(fpc)
    >#如果提示没有fpc包,则使用install.packages('fpc')按照,注意单引号。
    > data <- read.csv('train.csv')
    > x <- data[,c(2,3,4,5)]
    > #读取data数据的第2,3,4,5共4列作为维度数据,索引从1开始
    > ds <- dbscan(x,0.02,6)
    > #其中2是距离半径,6是每次计算囊括的点的数量,具体可以根据数据表现进行调整,这也是基于密度聚类算法的局限之一
    > par(bg="grey")
    > plot(ds, x)

    其次是基于Kmeans算法的R语言脚本:

    >library(cluster)
    > data <- read.csv('train.csv')
    > x <- data[,c(2,3,4,5)]
    > res <- kmeans(x,centers=3)
    > par(bg="grey")
    > plot(x,col=res$cluster)
    > #结果以不同颜色的标记不同的分类类别

    以上是简单的执行脚本,不涉及复杂的参数设置,比如在Kmeans算法中还可以设置收敛值,迭代次数等,更多内容随着学习的深入再逐步添加,简单的算法已经足够应付很多需求了。

    展开全文
  • R语言遗传算法

    千次阅读 2017-07-28 22:37:00
    R语言中有程序包实现了遗传算法,通常使用mcga\genalg\rgenoudmcga包。

    R语言中有程序包实现了遗传算法,通常使用mcga\genalg\rgenoud

    mcga包

    mcga主要包括两个函数,mcga与multi_mcga,其中mcga适用于单目标函数最小化问题
    而multi_mcga可以使用mcga一样的逻辑实现多目标化的优化
    计算f(x) = x&sin(x)

    library(GA)
    library(foreach)
    library(mcga)
    getAdjust <- function(x)
    {
      if(x>=0 && x<=12.55)
      {
        return(-(x*sin(x)))
      }else{
        return(exp(100))
        }
    }
    m = mcga(popsize = 20,chsize = 1,minval = 0,maxval = 12.55,maxiter = 1000,evalFunc = getAdjust)
    str(m)                                                         #List of 10
    #$ population: num [1:20, 1] 7.96 7.96 7.96 7.96 7.96 ...
    #$ costs     : num [1:20] -7.91 -7.91 -7.91 -7.91 -7.91 ...
    #$ popsize   : num 20
    #$ chsize    : num 1
    #$ crossprob : num 1
    #$ mutateprob: num 0.01
    #$elitism   : num 1
    #$ minval    : num 0
    #$ maxval    : num 12.6
    #$ maxiter   : num 1000
    
    #从population可知,我们求得的最优解为7.98,需要注意的是,在计算适应度的函数中,需要限制参数
    #的范围,由于评估函数的是针对最小化问题的,所以要求最大值,需要加个负号
    
    模型参数介绍
    #mcga(popsize, chsize, crossprob = 1.0, mutateprob = 0.01, 
    #     elitism = 1, minval, maxval, maxiter = 10, evalFunc)
    #popsize     种群规模
    #chsize   参数数量
    #crossprob    交叉概率,默认为1.0
    #mutateprob   变异概率,默认为0.01
    #elitism      直接复制到子代的最佳个体数目,默认为1个
    #minval     随机生成种群的下边界值
    #maxval     随机生成种群的上边界值
    #maxiter      最大世代次数,即繁殖次数,默认为10
    #evalFunc     一个R函数,用来计算个体适应度,每一个问题都默认是最少化问题

    genalg包

    genalg包是基于R语言用于二元和浮点染色体的遗传算法,它主要包括了两个函数 rbga.bin与rbga

    rbga.bin实现了基于二元染色体的遗传算法,可用于特征选择,其结果最优时对应的染色体的评估结果是最小的
    rbga实现了基于浮点染色体的遗传算法,采用待优化的浮点值的最大最小值作为输入,对应最佳染色体的评估结果是最小的
    它们的实现过程,都需要自定义评估函数evalFunc,rbga.bin的函数evalFunc以二元染色体为参数,而在rbga函数中,需要一个浮点向量作为参数,它们都可以通过设置monitorFunc对遗传算法的实现过程进行监控,monitorFunc需要rbga对象作为参数
    与mcga包不同,genalg包中的rbga对象,可以调用plot函数进行进行可视化,展现遗传算法运行过程中的特征,默认显示最小值和平均的评估值,指示遗传算法执行的进度。直方图用于呈现二元染色体基因的选择频率,即一个基因在当前种群被选择的次数如果是浮点染色体,它将为每个变量绘制直方图来说明当前种群中被选择的值。
    参数图用于呈现评估函数与变量值,这对查看变量与评估值之间的相关关系是很有用

    library(genalg)
    #定义适应度函数
    getAdjust <- function(x)
    {
      if(x>=0 && x<=12.55)
      {
        return(-(x*sin(x)))
      }else{
        return(exp(100))
      }
    }
    
    #定义监控函数
    monitor = function(rbga0)
    {
      #打印种群中的第一个个体的值population[1,]
      print(rbga0$population[1,])
    }
    
    rbgaObj = rbga(stringMin = c(0),stringMax = c(12.55),popSize = 50,iters = 1000,
                   mutationChance = 0.01,monitorFunc = monitor,evalFunc = getAdjust,verbose = TRUE)
    
    str(rbgaObj)
    
    #List of 12
    #$ type          : chr "floats chromosome"
    #$ stringMin     : num 0
    #$ stringMax     : num 12.6
    #$ popSize       : num 50
    #$ iters         : num 1000
    #$ suggestions   : NULL
    #$ population    : num [1:50, 1] 7.98 7.98 7.98 7.98 7.98 ...
    #$ elitism       : num 10
    #$ mutationChance: num 0.01
    #$ evaluations   : num [1:50] -7.92 -7.92 -7.92 -7.92 -7.92 ...
    #$ best          : num [1:1000] -7.92 -7.92 -7.92 -7.92 -7.92 ...
    #$ mean          : num [1:1000] 1.291 -0.251 -1.625 -2.506 -3.273 ...
    #- attr(*, "class")= chr "rbga"
    
    #从population可知,我们求得的最优解为7.98,这与我们上文捉到的最优解相同,对rbgaObj调用,可知,迭代次数的增加。
    #评估先是骤降,经过一段不稳定的变化之后,在1000次附近趋于稳定。
    plot(rbgaObj)
    #当设置参数type = "hist"时,可得直方图,如图可知,可知变量在7.98附近取值的频率最高,可见算法在此处收敛,并得到最优解
    plot(rbgaObj,type = "hist",breaks = 50)
    #当设置参数type = "vars"时,可得参数图,从图中可以看出,当变量值在7.98处时,评估值最低,对应全局最优
    plot(rbgaObj,type = "vars")
    
    模型参数介绍
    rbga(stringMin=c(), stringMax=c(),
         suggestions=NULL,
         popSize=200, iters=100,
         mutationChance=NA,
         elitism=NA,
         monitorFunc=NULL, evalFunc=NULL,
         showSettings=FALSE, verbose=FALSE)
    
    
    #stringMin  含有每个基因最小值的向量
    #stringMax  含有每个基因最大值的向量
    #suggestions    建议染色体可选列表
    #popSize       种群规模,个体数量,也是染色体数量,默认200
    #iters       迭代次数,默认为200
    #mutationChance  染色体的基因突变机会,默认为 1/(size+1),它影响收敛速度和搜索空间的探测,低的突变率收敛更加快,然而高的突变率增加搜索空间的跨度
    #elitism    保留到子代的染色体的数目,默认为为种群规模的20%
    #monitorFunc    监控函数,每产生一代后运行
    #evalFunc     用户自定义方法,计算给定染色体的适应度
    #showSettings     如果为TRUE,设置信息会打到屏幕上,默认FALSE
    #verbose        如果为TRUE,算法将会打印更多的动态信息,默认FALSE
    展开全文
  • md5加密算法~Java语言实现

    万次阅读 多人点赞 2020-12-08 16:07:50
    md5加密算法~Java语言实现 前言        密码是现在生活中非常常见的东西,平时使用QQ需要密码,使用微信需要密码,玩游戏等等很多地方都需要用到密码。     &...
  • 这是《数据结构与算法 Python 语言实现》 (古德里奇)版,每一章书后习题和解答,我已经买了这本书, 因为想在看完每一章后,完成习题,所以记录下来! 这篇文章是第一章的习题内容!因为题目太长,懒得自己书写,...
  • 数据结构算法之 C 语言实现

    千次阅读 2018-05-04 09:03:10
    单链表算法大全(包含所有常见操作):单链表算法链接 二叉树算法大全(包含所有常见操作):二叉树算法链接 迪杰斯特拉算法:迪杰斯特拉算法链接 矩阵无向图算法(生成、BFS、DFS):矩阵无向图算法链接 邻接表...
  • 计算机语言表示算法必须严格遵循所用语言的语法规则。 【例2-20】求1×2×3×4×5C语言表示。 main(){ int i,t; t=1; i=2; while(i5){ t=t*i; i=i+1; } printf("%d",t);} 【例2-21
  • 九大排序算法(Python 语言实现)

    千次阅读 多人点赞 2021-05-19 09:30:34
    目录一、选择排序法二、冒泡排序法三、直接插入排序法四、合并排序法五、希尔排序法六、快速排序法七、堆排序法7.1 树的概念7.2 树的表示7.3 树的相关术语7.4 什么是二叉树7.5 二叉树类别7.6 堆的概念7.7 使用堆进行...
  • KNN算法(R语言)

    千次阅读 2019-02-28 22:03:01
    k最临近(KNN)算法是最简单的分类算法之一,属于有监督的机器学习算法算法流程 KNN的核心思想是:找出特征空间中距离待分类点最近的k个点,如果这k个点大多数属于某一个类别,则该样本也属于这个类别。 k值一般...
  • R语言中的排序算法

    千次阅读 多人点赞 2017-12-05 14:57:04
    我曾经写过一篇名为《程序员没有理由不知道的8大排序》,在那篇博客当中,8大排序算法有详细的介绍,代码实现主要是由Java代码实现的,最近R语言比较多,所以这次再一次整理一下R语言中的排序算法,希望对大家有所...
  • 分享:四十种语言分别写一个MD5算法 之2 C#语言MD5算法 using System.Text; using System.Security.Cryptography;   byte[] data = Encoding.ASCII.GetBytes("hell
  • 算法并非和语言无关

    千次阅读 2013-09-14 20:09:26
    基本上,所有的算法书上都默认选用了伪代码来表达算法,因为这样可以脱离具体的语言,让算法学习者能够直面算法的本质,理解算法的核心,然后使用自己常用的语言来重新表达,写出能够运行的代码。实际上,在我接触到...
  • Kmeans算法的R语言代码实现

    千次阅读 2018-12-27 21:18:06
    Kmeans算法是机器学习里面的相当多的一种聚类算法,属于半监督学习的范畴,如果你对数据科学很熟悉的话,R和Python都有相应的封装函数,这篇文章带你从R自带函数中解脱出来,进一步探索kmeans算法的内部并用R原生...
  • 分享:四十种语言分别写一个MD5算法 之39 MySQL语言MD5算法  SELECT MD5('hello csdner') 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ 99923309 Mail:bwsyq@bwsyq.com
  • 数据结构与算法(Python语言实现)整理算法和数据结构的知识!
  • 分享:四十种语言分别写一个MD5算法 之36 REBOL语言MD5算法  >> checksum/method "hello csdner" 'md5 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ 99923309 Mail:bwsyq
  • R语言聚类算法比较

    千次阅读 2017-06-12 11:46:12
    说明在使用不同的聚类算法完成数据聚类操作后,我们可以对算法的性能进行评估,绝大多数情况下,我们即可以使用簇内距离也可以使用簇间距离作为评价标准。使用fpc算法包的cluster.stat函数来比较不同的聚类算法
  • 分享:四十种语言分别写一个MD5算法 之38 Ruby语言MD5算法  require 'digest/md5' Digest::MD5.hexdigest("hello csdner") 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ
  • 分享:四十种语言分别写一个MD5算法 之37 RLaB语言MD5算法  >> x = "hello csdner" hello csdner   >> hash("md5", x) 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ 9
  • 算法工程师大致是做什么

    万次阅读 多人点赞 2021-01-25 22:37:39
    笔者在算法领域这些年遇到了不少做算法的同行,发现各自的差别还是很大的,工作侧重点甚至思维方式都不同。为了给刚入门的朋友介绍得清晰一些,这里就简单串一串我遇到的不同的算法算法与非算法的区别 一般来说,...
  • 分类算法的R语言实现案例

    千次阅读 2016-02-23 22:52:46
    针对《R语言与网站分析》一书未提供数据集和源代码的情况,自己动手整理了一个可用于其中分类算法的数据集,并且基于该数据集实现了朴素贝叶斯、SVM和人工神经网络等分类算法。附件中有详细的数据集、源程序和说明...
  • 分享:四十种语言分别写一个MD5算法 之40 Tcl语言MD5算法  package require md5 puts [md5::md5 -hex "hello csdner"] 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ 999
  • SM4加密算法(JAVA语言实现)

    万次阅读 2018-10-16 19:39:37
    1、SM4算法简介 中国国家密码管理局于2006年1月6日发布第7号公告,将我国无线局域网产品的加密算法确定为SM4算法(原SMS4)。这是国内官方公布的第一个商用密码算法。 SM4分组密码算法是一个迭代分钟密码算法,由...
  • 自然语言使用算法

    千次阅读 2013-02-17 17:19:53
    在拼音错误更正中使用最小编辑距离算法,在语音识别和机器翻译中使用的Viterbi(算法 Viterbi algorihm)和向前算法(forward algorithm),在句法剖析中使用CYK算法(CYK algorithm)和Earley算法(Earley algorithm...
  • 分享:四十种语言分别写一个MD5算法 之35 R语言MD5算法  library(digest) hexdigest  algo="md5", serialize=FALSE) 版权所有:百万商业圈 未经许可不得转载,有任何疑问请与我本人联系 QQ 99
  • R语言使用逻辑回归分类算法

    万次阅读 2017-06-05 15:47:31
    说明逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个...在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率。通过调用glm函数将family参数也就是响应分布指定为binominal(二项式)。
  • Bagging算法的R语言实现

    千次阅读 2014-10-27 17:07:51
    循环K次,每次都从样本集D中有放回地抽取样本集Di,这样总共得到k个样本集,这K个样本集进行决策树生成,获得K个决策树模型,再将要检测的数据这K个决策树模型进行多数表决,获得票数多的结论。 这种思想跟...
  • java语言中哪一种排序算法用的最多?快速排序既然效率高,为什么我们还要冒泡呢?冒泡的好处是什么
  • Apriori算法的R语言实现

    千次阅读 2015-10-08 10:31:27
    R语言与网站分析书中的实例代码实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 769,286
精华内容 307,714
关键字:

做算法用什么语言