Java 数据结构与算法_1. 概述_算法

算法的概念, 比如, 在这里边存着一堆数据,算法就是按照一定的条件,从这已经存在的数据里边进行计算,得到目标或者期望要得到的结果,这就是算法.

程序呢其实呢,就是对现实世界的一个模拟,程序是用来解决现实生活中的问题的.

在生活中遇到任何一个问题,其实都可以多种解决方案,而不同解决法带来的成本是不相同的,那么现在要用算法或者要用程序来解决现实生活中的问题.

那么同理,使用的算法也可以有不同, 或者叫解决方案也可以有不同.

但是呢,总体上一个优秀的算法,需要追求这么两个目标,第一个花最少的时间完成需求,第二个占用最少的内存空间完成需求.

需要用最少的时间来完成计算.

占用最少的内存空间完成需求, 是因为服务器对内存空间是要求的,比方说有一台服务器,那么它随着用户量的增长,服务器这个内存空间其实还是有瓶颈的,如果说算法能够占用的内存空间更小的话,带来的好处就是对硬件成本就可以降低.

在研究算法的时候,重点就需要从时间角度和内存角度来进行分析这个算法.

通过两个案例分析一下,花最少的时间和占最少的内存空间.

第一个需求是计算1到100的和.

给出两种解法,第一个解法定义了两个变量,sum =0,n=100,然后做了一个for循环,得到1到100之间的每一个数字叠加到求和变量上,最后把和输出,这是第一种解法.

第二种解法,定义两个变量,同样是sum =0,n=100,但是求和不是通过for循环,而是通过高斯公式来完成,sum =(n+1)×n÷2,最后把和变量输出去.

现在分析一下这两个算法的占用时间.

第一个它的算法,定义两个变量,要做100次循环,做100次加法运算, 最后输出结果.

而第二个也定义了两个变量,但是做求和运算时候,做了一次加法,做了一次乘法,做了一次除法, 总共做了三次运算.

而上边是做了100次运算,然后最后把这个和输出出去.

很明显,3次运算要比100次运算花费时间要少, 因此第二种算法就是要追求的算法.

它会占用更少的时间去完成相同的需求,这是第一个案例.

第二个案例,有一个需求, 是计算10的阶乘.

给出了两种解法.

第一种解法,fun1这个解法,需要参数n ,在这里面是通过递归可以完成,那么如果n==1,那么阶乘就是1,等于1×1,就是1.

如果不是1,计算方式就是就是n的阶乘等于nⅹ(n-1)的阶乘.

那n-1的阶乘可以通过递归调用 fun1 , 就可以得出n-1的阶乘,这是第一种算法.

第二种算法,定义了一个记录阶乘的变量result ,在里边,做了一个for 循环,那么for 循环里边得到1到n之间的每一个值,然后累积, 乘到阶乘变量result 上,最终返回结果.

分析一下这两种解法对内存的一个占用.

第一种是通过递归来完成的,如果要求10的阶乘的话,很明显, 这个方法会执行十次. 而每一次方法的调用,其实都会在栈内存里边开辟一块内存,来执行这个方法,那么要调用十次这样的方法,就会占用十块内存来执行这10个方法.

而第二种解法,调用了一次fun2方法,因此在栈内存里边, 只需要开辟一块内存来执行fun 2这个方法即可.

因此,很明显, 第二种算法占用的内存, 是要比第一种算法占用内存是要小的,所以第二种这种解法才是算法要追求的.因为它所占用的内存空间更小.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值