• 算法只是对问题求解方法的一种描述,它不依赖于任何一种语言


    算法是独立存在的一种解决问题的方法和思想。

    对于算法而言,实现的语言并不重要,重要的是思想。

    算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等)。

    算法的五大特性

    输入: 算法具有0个或多个输入

    输出: 算法至少有1个或多个输出

    有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成

    确定性:算法中的每一步都有确定的含义,不会出现二义性

    可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成

    --------------------- 

    作者:king1043 

    来源:CSDN 

    原文:https://blog.csdn.net/weixin_42008209/article/details/80159564 

    版权声明:本文为博主原创文章,转载请附上博文链接!

    算法是指对特定问题求解步骤的一种描述。

    算法只是对问题求解方法的一种描述,它不依赖于任何一种语言,既可以用自然语言、程序设计语言(C、C++、Java、Python等)描述,也可以用流程图、框图来表示。一般为了更清楚地说明算法的本质,我们去除了计算机语言的语法规则和细节,采用“伪代码”来描述算法。“伪代码”介于自然语言和程序设计语言之间,它更符合人们的表达方式,容易理解,但不是严格的程序设计语言,如果要上机调试,需要转换成标准的计算机程序设计语言才能运行。

    算法具有以下特性。

    (1)有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。

    (2)确定性:每条语句有确定的含义,无歧义。

    (3)可行性:算法在当前环境条件下可以通过有限次运算实现。

    (4)输入输出:有零个或多个输入,一个或多个输出。

    算法1-2的确算得挺快的,但如何知道我写的算法好不好呢?

    “好”算法的标准如下。

    (1)正确性:正确性是指算法能够满足具体问题的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期的需求。

    (2)易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后期调试和修改。

    (3)健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理系统中登记学生年龄时,若将21岁误输入为210岁,系统应该提示出错。

    (4)高效性:高效性是指算法运行效率高,即算法运行所消耗的时间短。算法时间复杂度就是算法运行需要的时间。现代计算机一秒钟能计算数亿次,因此不能用秒来具体计算算法消耗的时间,由于相同配置的计算机进行一次基本运算的时间是一定的,我们可以用算法基本运算的执行次数来衡量算法的效率。因此,将算法基本运算的执行次数作为时间复杂度的衡量标准。

    (5)低存储性:低存储性是指算法所需要的存储空间低。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小称为空间复杂度。

    除了(1)~(3)中的基本标准外,我们对好的算法的评判标准就是高效率、低存储。

    --------------------- 

    作者:趣学算法 

    来源:CSDN 

    原文:https://blog.csdn.net/rainchxy/article/details/77323848 

    版权声明:本文为博主原创文章,转载请附上博文链接!

    时间复杂度:算法运行需要的时间,一般将算法的执行次数作为时间复杂度的度量标准。

    看算法1-3,并分析算法的时间复杂度。

    //算法1-3 

    sum=0;                     //运行1次

    total=0;                   //运行1次

    for(i=1; i<=n; i++)        //运行n次

    {

      sum=sum+i;               //运行n次

      for(j=1; j<=n; j++)      //运行n*n次

        total=total+i*j;       //运行n*n次

    }

    把算法的所有语句的运行次数加起来:1+1+n+n+n×n+n×n,可以用一个函数T(n)表达:

    T(n)=2n2+2n+2

    当n足够大时,例如n=105时,T(n)=2×1010+2×105+2,我们可以看到算法运行时间主要取决于第一项,后面的甚至可以忽略不计。

    用极限表示为:

    ,C为不等于0的常数

    如果用时间复杂度的渐近上界表示,如图1-1所示。

    从图1-1中可以看出,当nn0时,T(n)Cf (n),当n足够大时,T(n)和f (n)近似相等。因此,我们用О(f (n))来表示时间复杂度渐近上界,通常用这种表示法衡量算法时间复杂度。算法1-3的时间复杂度渐近上界为О(f (n))=О(n2),用极限表示为:

    图1-1 渐近时间复杂度上界

    还有渐近下界符号Ω(T(n)Cf (n)),如图1-2所示。

    图1-2 渐近时间复杂度下界

    从图1-2可以看出,当nn0时,T(n)Cf (n),当n足够大时,T(n)和f (n)近似相等,因此,我们用Ω(f (n))来表示时间复杂度渐近下界。

    渐近精确界符号Θ(C1f (n)T(n)C2f (n)),如图1-3所示。

    从图1-3中可以看出,当nn0时,C1f (n)T(n)C2f (n),当n足够大时,T(n)和f (n)近似相等。这种两边逼近的方式,更加精确近似,因此,用Θ (f (n))来表示时间复杂度渐近精确界。

    图1-3 渐进时间复杂度精确界

    我们通常使用时间复杂度渐近上界О(f (n))来表示时间复杂度。

    --------------------- 

    作者:趣学算法 

    来源:CSDN 

    原文:https://blog.csdn.net/rainchxy/article/details/77323848 

    版权声明:本文为博主原创文章,转载请附上博文链接!

    空间复杂度:算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。

    空间复杂度的本意是指算法在运行过程中占用了多少存储空间。算法占用的存储空间包括:

    (1)输入/输出数据;

    (2)算法本身;

    (3)额外需要的辅助空间。

    输入/输出数据占用的空间是必需的,算法本身占用的空间可以通过精简算法来缩减,但这个压缩的量是很小的,可以忽略不计。而在运行时使用的辅助变量所占用的空间,即辅助空间是衡量空间复杂度的关键因素。

    --------------------- 

    作者:趣学算法 

    来源:CSDN 

    原文:https://blog.csdn.net/rainchxy/article/details/77323848 

    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    bzoj 3036: 绿豆蛙的归宿
    bzoj 2956: 模积和 ——数论
    bzoj 4378: [POI2015]Logistyka ——树桩数组+离散化
    Codeforces Round #441 Div. 2题解
    es 学习笔记
    Redis 热点key
    深入拆解Tomcat &Jetty——极客时间
    mysql 行转列
    在kafka connect 同步 mysql 主从数据库
    使用Kafka Connect 导入导出数据
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10371509.html
Copyright © 2020-2023  润新知