zoukankan      html  css  js  c++  java
  • 算法初识

      算法(Algorithm)是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,而程序是算法的一个实例,将算法通过某种 计算机语言表达出来的具体形式;同一算法可用任一种计算机语言来表达。常见算法有:链表、Graph、排序、动态规划和树&堆等等。

      一个算法有五个重要特性:

          1、有穷性(Finiteness):在合理时间内,执行有限步骤后终止。

          2、确定性(Definiteness):每一步骤都有确切的定义。

          3、输入(Input):零个或多个输入,算法从外界获得初始条件,零表示算法本身定义了初始条件。

          4、输出(Output):一个或多个输出,数据经算法处理要有结果,无输出则算法无意义。

          5、有效性(Effectiveness):算法中每一个步骤都能有效执行并得到确定结果。

    例:a + b + c = 1000,a^2 + b^2 = c^2,且a,b,c均为自然数,求解所有满足条件的a,b,c的值?

    思路:设定变量范围,采用枚举法,编程求解之。

    程序一:

     1 from time import clock
     2 
     3 start1 = clock()
     4 for a in range(0,1001):
     5     for b in range(0,1001):
     6         for c in range(0,1001):
     7             if a+b+c == 1000 and a**2+b**2 == c**2:
     8                 print('a:{},b:{},c:{}'.format(a,b,c))
     9 
    10 end1 = clock()
    11 print('spend time:',end1-start1,'seconds')

    运行结果:

    a:0,b:500,c:500
    a:200,b:375,c:425
    a:375,b:200,c:425
    a:500,b:0,c:500
    spend time: 208.44498471352125 seconds

    程序二:

    1 start2 = clock()
    2 for a in range(0,1001):
    3     for b in range(0,1001-a):
    4         c = 1000-a-b
    5         if a**2 + b**2 == c**2:
    6             print('a:{},b:{},c:{}'.format(a, b, c))
    7 
    8 end2 = clock()
    9 print('spend time:',end2-start2,'seconds')

    运行结果:

    a:0,b:500,c:500
    a:200,b:375,c:425
    a:375,b:200,c:425
    a:500,b:0,c:500
    spend time: 0.9581626460811319 seconds

      虽然解决问题相同,但两种方法的时间复杂度差异很大,程序一大‘O’记法:1000*1000*1000,程序二:1000*1000,程序一花费时间是程序二的220倍,可见程序二明显优于一,所写的程序既要解决问题,也要兼顾效率,要时刻有优化意识,使程序趋向完美!

    渐变 --> 突变
  • 相关阅读:
    sql-lib闯关秘籍之1-10关
    简单的SQL注入
    五分钟带你读懂 TCP全连接队列(图文并茂)
    Ambari HDP集群搭建全攻略
    Spring Cloud Security OAuth2.0 认证授权系列(入门篇)
    敲黑板:InnoDB的Double Write,你必须知道
    重要,知识点:InnoDB的插入缓冲
    你不知道的内存知识
    每日一个知识点:关于磁盘的一些事儿
    Spring Boot 系列:日志动态配置详解
  • 原文地址:https://www.cnblogs.com/lybpy/p/7764246.html
Copyright © 2011-2022 走看看