算法心经:
    前几天,一个好友告诉我,他要写一本书,叫《编程低手箴言》,我马上管他要地址去看看,出乎意料,写得比我想象得好。后来我就自己在想,是不是也应该把我平时的一些心得写出来呢?越越冲动,既然有了想法,那内容选什么呢?既然讲给别人听,就要拿自己拿手的,也就是最有把握的,要不一贴出来被人们拍死就麻烦了。所以,我把题材选为了讲算法,名字嘛,就姑且叫《算法心经》好了。
   写出点东西,勇气是必不可少的,像CSDN有个知名作者,写过一个什么关于矩阵的新见解,马上被无数潜水的高手们拍得半死,其实我一看很多的批评也没什么道理,即使有道理的也纠缠在名字这种taste differ的范围内,不过因为缺少勇气,他再也不出这个矩阵的续篇了。我就不同,也许差点水平,但绝不差勇气。写这个东东除了给别人看外,也是对自己平时遇到的一些很有意思的问题的总结,如果大家发现了什么不妥,请马上帮我指出来。
   讲算法的资料太多了,大多老一套,贪婪、分枝、限界等,如果想按这个套路学,那大家都去看MIT的算法导论好了,我再写出来也是copy。既然是原创,就要有点新意,下面的内容完全按我对各种算法的思路总结来整理,保证您看着一个与众不同。另外介于本人的水平有限,所有例子只对我碰上读过的感觉有用的问题举例,嫌不够深入的朋友抱歉。
    废话少说,开始...

一,数学的应用:
    我在抱本数学书看时,经常有同学问我,“看这玩意干啥子?“我答曰:”有用“,又问:“有啥用”,我托腮沉思半天,只挤出“反正有用”这种教条结论。的确,地球人都知道数学和计算机关系暧昧,但具体到哪有交集,又说不清楚,我看可能有两个原因:1,还不到能理解到数学用处的水平。2,使数学后,没有归纳总结。我想大多数人属于后者,为了弥补这点,我把平时用到数学的地方总结出来,让大家看看数学的威力。

积分的应用
    微积分是高等数学的基础,但我们搞程序的平时使到微积分的时候实在少之又少,反正我大四以前根本没有用到微积分(编写什么插值求积分那种程序不算),果真如此吗???
    微积分的威力发挥在算法分析上,你会算法分析吗?会的话,肯定会体会到。看看积分的例子:
    “有一个无序数列,每次遍历整个数列查找一个数,然后删除之,重复这个步骤直到数列为空,问这个算法的效率?”
    这个你一眼就看出效率了,遍历的次数从1个增加到n个,那么平均是n/2个,一共执行n次,所以效率是n*n/2,也就是O(n*n),呵呵,很简单,惬意的笑。但细想一想,为什么这里能把n除以2呢?是因为n是个线性函数,所以在计算时可以用它的中间值来计算。这种中间值概念的应用很普遍,很多算法效率的计算有需要,回忆在quick sort的效率分析里,因为整个数列里的每个数与第一个数(比较数)交换的概率相同,那就是绝对的线性关系(函数为常数),所以才可以用,2*T(k)代替T(k)+T(n-k)。

其实这题也可以用积分来算,效率实际上就是把n在1到n上取积分,也就是n*n/2,和先前的答案一样,注意这里,积分本身是一个连续的数学概念,这里扩展到离散求积分。
    我们把上面的例子改改:
    “有一个有序数列,每次用二分查找找到其中一个值,删除之,重复这个步骤直到数列为空,问这个算法的效率?“
    想啊想啊,二分效率是log(n),从log(n)降到log(1),那么和先前的一样,效率是中间值*n,就是log(n)/2*n,也就是O(n*log(n)),我赶紧握着你的手说,“恭喜你,蒙对了!”,最终的答案确实是O(n*log(n)),但绝不是这么出来的,因为log函数不是线性函数,你绝对不能用中间值代替来进行计算。
    哦!那该怎么计算呢?积分来了。上面的算法实际是对log操作从1增加到n,在数学上实际是离散的对log函数做1到n的积分,也就是对log(n)积分。那log(n)的积分怎么算呢?用Udi的《算法导引》的估计法,我们先估计其积分是n*n,我们对n*n求导
    D(n*n)=2*n>log(n)
    我们的估计大了,那么是不是n*log(n)呢?
    D(n*log(n)) = D(n)*log(n) + n*D(log(n)) = log(n)+ n*1/n=log(n) +1
    哇!我们对了,n*log(n)求导就是log(n)再和一个常数相加,于是可以判断log(n)的积分就是和n*log(n)一个等级的,于是,答案出来了,这个算法的效率是n*log(n),这就是积分的威力。

下节我们来看微分的应用...

转自:http://hi.baidu.com/jrckkyy/blog/item/d1c1c00e0ed39ac07acbe16a.html

算法心经.数学的应用.积分的应用相关推荐

  1. 算法心经:数学的应用:概率的应用

    终于写到重头戏了,如果说前面的微分积分还属于基础理论,而与我们日常的算法设计距离有点远的话,那么后面的概率.矩阵.空间立体几何,可就是和应用息息相关了. 为什么要有概率 概率是个数学概念,但它在计算机 ...

  2. 算法心经.数学的应用.微分的应用

    终于有了空闲,来写微分的应用,有一点怎么强调都不过分,限于本人水平有限,可能你觉得的很重要的应用或者很常见的应用,我这里并没有提及,那么请你跟贴或者给我写信,帮我完善一下,谢先. 讲微分的应用,一定要 ...

  3. 数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化

    数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化 https://baijiahao.baidu.com/s?id=1600164518587031730&wfr=spid ...

  4. FE之DR之线性降维:PCA/白化、LDA算法的数学知识(协方差矩阵)、相关论文、算法骤、代码实现、案例应用等相关配图之详细攻略

    FE之DR之线性降维:PCA/白化.LDA算法的数学知识(协方差矩阵).相关论文.算法骤.代码实现.案例应用等相关配图之详细攻略 目录 PCA 1.PCA的数学知识 1.协方差矩阵计算 2.PCA算法 ...

  5. 一文读懂APS系统的核心算法和数学理论

    APS系统拥有以数学模型为基础的最强算法,可以满足更高难度.更广泛的需求.但它不是可以直观理解的方法,真正的难点不在于把算法变成软件,而是在于寻找和证明这个算法.因此,各APS公司对其核心算法和数学理 ...

  6. 应用计算机解数学模型之我见,计算机模拟算法在数学建模中的应用

    金渤淏 摘 要:随着世界科学技术水平的普遍提高,电子计算机技术逐渐发展成熟,其中计算机模拟算法在其他学科中有着十分广泛的应用,从而给这些学科的研究提供了算法基础.电子计算机技术中的计算机模拟算法是指安 ...

  7. 算法笔记——数学相关

    算法笔记--数学相关 高精度 乘法逆元 排列组合 二项式定理 质数的判定和应用 约数 拓展欧几里得 大步小步算法(BSGS) 拓展大步小步算法 快速乘和快速幂 矩阵相关 欧拉函数 欧拉定理及费马小定理 ...

  8. python爬楼梯问题_爬楼梯算法的数学思路

    爬楼梯算法的数学思路 今日腾讯实习面试,问到一题算法. 爬楼梯问题:一个楼梯一共n个台阶,一次上1或者2个台阶.问,一共多少种解法. 这个问题,当时学递归的时候,我记得做过.但是已经一年半没写过递归和 ...

  9. 【 反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10)】

    反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10) 数学推导 BP算法 BP神经网络可以说机器学习的最基础网络.对于普通的简单 ...

最新文章

  1. 台湾大学林轩田机器学习基石课程学习笔记7 -- The VC Dimension
  2. 【干货分享】推荐5个可以让你事半功倍的Python自动化脚本
  3. 20155330 2016-2017-2 《Java程序设计》第五周学习总结
  4. 虚拟化精华问答 | 什么是虚拟化?
  5. 码农即将被淘汰?未来10年,这样的程序员才值钱!
  6. (5)全局异常捕捉【从零开始学Spring Boot】
  7. linux从字符界面转入图形界面一法
  8. 学子商城实训项目总结
  9. 赵小楼《天道》《遥远的救世主》深度解析(87)股市不是超市,慎入
  10. android 休眠锁
  11. 戴着人工心脏上脱口秀大会——王十七的充电人生
  12. linux下磁盘坏道修复,linux磁盘坏道修复记录
  13. AD多层板拼板内电层网络丢失处理
  14. 实习期间工作、学习、成长、收获总结
  15. react 中 使用 Monaco Editor 编辑器
  16. 这就是你日日夜夜想要的docker!!!---------Harbor私有仓库
  17. ImToken 钱包的研究
  18. 字体反爬,下载 .woff 文件
  19. matlab 求留数,用matlab求留数
  20. matlab nan 无色_Matlab NAN如何去掉

热门文章

  1. WINDOWS上KAFKA运行环境安装
  2. 三角剖分算法的数学理解
  3. VTK修炼之道47:图形基本操作进阶_法向量计算
  4. Delphi中methodaddress的代码解析
  5. NHibernate配置入门
  6. 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同?
  7. fcntl函数-文件控制函数
  8. servlet学习--Cookie小应用
  9. 【c语言 gcc9.1.0环境下编译报错】error: ‘true’ undeclared (first use in this function)
  10. java自定义注解解析及自定义注解