算法思想:枚举与剪枝

来源:互联网 发布:淘宝开店虚拟产品 编辑:程序博客网 时间:2024/06/10 07:58
在东北话中有一句:“小树不修不直溜,人不修理哏啾啾”。树要剪枝,才能更好的茁壮成长,程序也一样,在逻辑比较复杂的情况下,需要多层嵌套来完成业务逻辑,如果遍历数量比较大的话,计算机的运算速度会慢下来。下面来看这样的一种需求,假如杨云要做生意,但是它不会数学(她的数学有多烂,看为她而战),不知道怎么找零钱,需要我们写个程序来帮她计算,比如说8元,可以分为5元、2元、1元、5角。有多少种找零方案呢?
图片
    上面这种算法是最基础也是最容易想到的算法,这个程序如果按照正确性的考虑来说,这么写完全没有问题,但是我们学习数据结构,一个程序首先要考虑他的时间复杂度和空间复杂度,这里套了四层循环,时间复杂度是非常高的,现在数值不太大,如果数值很大的情况下计算机也吃不消。
    其实我们细细想来,这段代码有些情况我们是不需要考虑的,需要把多余的,不符合条件的事先去除掉,这样能提高程序的运行速度。 

图片
    我们把代码改成这样后,运行发现,出现了负数,我们就应该想到,这段代码还是可以剪枝的,因为有了一些不应该出现的数据,所以我们继续优化代码:
图片
    经过上面的剪枝,把多余的情况排除后,运行效率会提高不少,特别数越大,就越明显。其实写到这里,我们所要说的主题已经说完了,大家明白这个意思就好,如果想写的更好,可以把那些定义成变量,方便修改,这也是最基本的,这里就说一嘴就完,这次说的枚举与剪枝的思想,希望大家在工作能好好应用。 
0 0
原创粉丝点击