什么是算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 在谈到算法时,我们不得不去了解一下什么是时间复杂度和空间复杂度这两个概念 计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用大O符号(大O符号(BigOnotation)是用于描述函数渐进行为的数学符号。 空间复杂度:它是用来评估算法内存占用大小的一个式子。 Python算法的几大重要特征有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;确切性(Definiteness):算法的每一步骤必须有确切的定义;输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);高效性(Highefficiency):执行速度快,占用资源少;健壮性(Robustness):对数据响应正确。 Python算法除了具有以上特征,还和时间和空间有关系,不同的算法可能用不同的时间、空间或效率来完成同样的任务,因此,一个Python算法的优劣可以用空间复杂度与时间复杂度来衡量。 通过实例加深对算法的理解 如题所示: 要求x,y,z的1000以内取值满足xxyyzz,同时xyz1000,求解出所以x,y,z的组合情况? 求解过程如下 这里使用了一个wastetime方法作为装饰器来计算装饰过的方法的执行时间,这里有两种算法来求解这个问题 代码如下:importtimedefwastetime(func):deffunction(args,kwargs):starttimetime。time()resultfunc(args,kwargs)endtimetime。time()spendendtimestarttimeprint(函数s总共耗时。3f秒:(func。name,spend))returnresultreturnfunction 通常解法算法1wastetimedefnormal():forxinrange(1001):foryinrange(1001):forzinrange(1001):if(xxyyzzandxyz1000):print(x,x,y,y,z,z) 改进后解法算法2wastetimedefgoodjob():forxinrange(1001):foryinrange(1001):z1000xy这里的x,y已经明确后,那么z就可以直接算出来,而不用放在循环中去遍历if(xxyyzz):print(x,x,y,y,z,z) 入口方法ifnamemain:print(gamestart!)normal()goodjob()print(gameover!) 响应结果如下:gamestart!x0y500z500x200y375z425x375y200z425x500y0z500函数normal总共耗时341。505秒:x0y500z500x200y375z425x375y200z425x500y0z500函数goodjob总共耗时0。388秒:gameover! 总结: 通过这个示例,对于同一个问题给出两种不同的算法,两种算法在执行过程中我增加了对程序执行时间的统计,通过时间上的对比发现两个算法的执行时间相差非常的大,如响应结果所示。 由此我们可以得出一个结论,就是实现不同的算法程序执行的时间可以反应出算法的效率,即算法有优劣之分,好的算法可以节约时间,提高效率,反之则不然。