大家好,我是一只学弱狗,记录学习的点点滴滴!
算法才是程序设计的灵魂,每日一题!
优质文章
优质专栏
以前上课的时候,经常听老师说,他们研究方向所遇到的问题最终都是数学问题,比如用计算机描绘流水的动画啥的,这些动画非比我们想象的动画,而是特别专业特别逼真的那种,今天,我也逐渐感受到算法的本质真的是数学(听我装逼!!!)
其实是在看算法课的时候,老师讲到了对算法的复杂度进行分析的方法,听我的有点懵逼,于是我决心一定要学会对算法进行复杂度分析,关于那些数学的上确界、下确界啥的,上课时老师一般都是跟着PPT念一遍,我听得也很懵逼,对算法复杂度的分析还停留在简单的循环上,对于一个较为复杂的递归的算法就根本不会了。前面说过,算法的本质是数学,所以这篇博客呢?先来简单的练练手,找找感觉,当然,你第一次看很可能看不懂,我也就看了三四遍吧,给大家附上视频地址,感兴趣的可以去听一听,好,我们开始!
首先我们要学会数列求和公式,大家最快想到的应该是等差和等比,如下
刚开始以为上面那个等比求和公式是错的,仔细看了看原来是对象,它是从0开始的,不是从1开始的。
除上面外,再补充一个
高数上背的,先记住吧,我也忘了咋推导来着,
上面的是不是太简单了,下年看一个推导例子,你将会体会到数学是真的牛
突然来个这个例子干啥,下面用到,接下来我们求二叉搜索的时间复杂度,很多同学一项,不是lg(n),有什么好球的?是lg(n),借用马士兵老师的话说,你弄懂它的原理,不香么?
首先,我们假设n=2^k-1,其实就是为了方便,第一步求中间值的可以求导正中间,输入有2n+1种,这可不是假设的啊
我们想,什么情况下比较一次,当前是最开始中间的那个数了,什么时候比较两次,当然是第二次搜索左边一半和右边一半的中间那个数了,依此类推
所以总次数就等于对每个输入乘以次数并求和
我们下面开始推算
二分搜索的数学推断就到这儿了,要回寝室睡觉了,明天再补充估计和式上界的放大法和估计和式渐进的界。
下面举个例子吧!
使用积分也能求上界和下界?