浅谈对算法的一些概念的理解

最近计划重新开始学习数据结构和算法了

以下是关于《大话数据结构》第二章 读后总结

在此记录一下自己的理解和思考

概念一:算法的定义

书中

是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

个人理解

能够更快更巧妙的去计算解决一个数学问题的思路方法和实现步骤。

要类比的话就好比在农场中,人类可以利用袁隆平爷爷发明的杂交水稻的方法(算法)更快的去解决一个自然培育方法(普通的方法)所难以解决的粮食产量问题(数学问题)。

概念二:算法的特性

书中:

算法具有五个基本特性:

① 输入:接受零个或多个输入

② 输出:至少有一个或多个输出

③ 有穷性:执行结果在可接受的时间内完成

④ 确定性:执行的每个步骤都被精确定义

⑤ 可行性:执行的每一步的是可以实现的

个人理解:

算法的特性,

好比用天然户外种植和杂交水稻的方式进行种植,一片土地可以看成是一个神奇黑匣子。

你给它春天播下种子(输入)并不断的浇水(可行性),保证充足的水分和阳光(确定性)他就能够在秋天(有穷性)给你丰收的果实(输出)。当然你不种东西(零输入),他也可能给你长出杂草(输出)

要是杂交水稻的例子,那就更能体现这个特性,你这个杂交的方法(算法),是否可行(理论到实操:可行性),怎么进行杂交的(步骤和操作:确定性),要提供什么(输入),能产出什么(输出),多久能看到产出(有穷性)。

概念三:算法设计的要求

书中:

① 正确性:算法至少应该具有输入,输出和加功处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案。

② 可读性:算法设计的另一目的是为了便于阅读,理解,交流

③ 健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名奇妙的结果

④ 时间效率高和存储量低:设计算法应该尽量满足时间效率高和存储量低的要求

个人理解:

还是拿杂交水稻方法来说,能够拿出来作为算法的方法,那肯定要能够提高产能确实解决温饱问题(正确性),无异议的,一般人都能理解和明白(可读性)公认这个方法没问题。当然最好,在能快速提高产能(时间效率高)的情况下,还能够用消耗更少的资源,比如财力物力人力等(存储量低)。然后这个方法在筛选种子(输入)的时候是否有要求(健壮性)

概念四:算法效率的度量方法

书中:

① 事后统计法:通过设计好的测试程序和数据,利用计时器对不同算法编制的程序的运行时间进行比较。

② 事前分析估算法:在程序编制前,依据统计方法对算法进行估算。

个人理解:

事后统计法就是直接用计时器,直接看不同算法运算出结果时的总时间。

事前分析估算法就是大概数一下有哪些步骤,哪些步骤要花多长时间,进行简单的累加估算

概念五:函数的渐近增长

书中:

① 函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,

f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快于g(n)

个人理解:

相当于龟兔赛跑中,兔子和乌龟的比赛,虽然兔子提前让乌龟了跑了很多距离,但是兔子的加速度注定的天生的就会比乌龟还要快,所以只要终点是在无限长的位置,兔子🐇一定能超越并且是远超越乌龟🐢,

除非终点不长,就像我们常听到的那个故事的结果(🐢赢了🐇)。。。

因为不管一开始乌龟拉了兔子多长距离,只要兔子一发力,总有一个位置会是兔子和乌龟相遇的地方。

所以不同的算法,因该要考虑N的取值范围,算法A的基因比算法B基因优秀,但是如果在在指定的某些范围内,算法A就不一定要优于算法B。

概念六:算法的时间复杂度

书中:

① 算法时间复杂度的定义:

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并切丁T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

② 常见的时间复杂度

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

③ 最坏情况和平均情况

在查找的算法中,时间一般没有特殊说明按照最坏情况计算。

平均的查找时间一般为(n+1)/2,平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。

④ 算法的空间复杂度

通过计算算法所需要的存储空间

个人理解:

算法执行得到结果得总时间和影响总时间得各个因素的总关系。比如,从播种到获取果实的时间,是由水分,阳光等环境因素影响。

还有比较直观能理解的常见的关系,就是初中学习的 y = 1, y = x, y = x^2,y = log2x

把y比作总时间,x比作因素, y = 1 ,说明因素x的变化对y总时间没啥影响

y = x, 说明总时间会随这x的增长而增长,呈线性关系

至于为什么平均的查找时间为 (n+1)/ 2

假设 我们在台球上,放着五粒桌球,分别为1,2,3,4,5号。我们的目标是摸出一号球。

假设我们每次都从第一个位置开始摸,

如果第一次的位置是 【1,2,3,4,5】,则第一次就摸中,胜利✌

但是 一号球 也有可能在第二个位置【2,1,3,4,5】,则按照我们摸法,得摸第二次才摸中

但是 一号球 也有可能在第三个位置【2,3,1,4,5】,则按照我们摸法,得摸第三次才摸中

但是 一号球 也有可能在第四个位置【2,3,4,1,5】,则按照我们摸法,得摸第四次才摸中

但是 一号球 也有可能在第五个位置【2,3,4,5,1】,则按照我们摸法,得摸第五次才摸中

所以我们要摸到 一号球 的次数 存在5种可能,分别是1次,2次,3次,4次,5次

所以直观感觉就知道 摸到一号求 的平均次数 就应该就是 3 次。就是取中间值

数学公式就是 (n+1)/ 2。

至于空间复杂度的理解应该就是非常直观,即占用空间的大小和影响空间大小因素的关系。

以上就是 对第二章(算法)的 总结归纳~

希望自己理解的没有啥错误😅

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值