码迷,mamicode.com
首页 > 编程语言 > 详细

算法初识

时间:2017-10-31 23:51:53      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:.so   get   win   href   问题   start   http   print   转化   

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

 

算法初识

标签:.so   get   win   href   问题   start   http   print   转化   

原文地址:http://www.cnblogs.com/lybpy/p/7764246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!