算法初识

Posted 专治spark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法初识相关的知识,希望对你有一定的参考价值。

  算法(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倍,可见程序二明显优于一,所写的程序既要解决问题,也要兼顾效率,要时刻有优化意识,使程序趋向完美!

 

以上是关于算法初识的主要内容,如果未能解决你的问题,请参考以下文章

Java初识方法

初识OpenGL 片段着色器(Fragment Shader)

初识OpenGL 片段着色器(Fragment Shader)

初识OpenGL (-)纹理(Texture)

初识OpenGL (-)纹理(Texture)

初识OpenGL (-)纹理(Texture)