热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聊一聊数学中的基本定理(五)——主定理

早点关注我,精彩不迷路:本系列文章介绍的前面几个定理,分别在算术,代数以及分析领域的基本定理起着各自领域基石的作用ÿ

早点关注我,精彩不迷路:

本系列文章介绍的前面几个定理,分别在算术,代数以及分析领域的基本定理起着各自领域基石的作用,相关内容请戳:

聊一聊数学中的基本定理(四)——微积分基本定理

聊一聊数学中的基本定理(三)——代数基本定理

聊一聊数学中的基本定理(二)——算术基本定理的价值

聊一聊数学中的基本定理(一)——算术基本定理的证明

而接下来这个定理,名字上虽然已经没有了基本(fundamental)二字,但是其名——主定理(main theorem)的响度一点也不压于基本定理的声音。想讲它还有一个原因是,它是难得的一个在离散数学为主导的计算机科学中,用分析的思想来解决的问题的例子。而且还是那么的基础和优雅,说它是整个计算机理论的基石之一也不为过。

主定理的基本内容

主定理谈的是一个由分治算法得到递推关系式的时候,如何来推导时间和空间复杂度的问题。具体如下:

假设有递归关系式outside_default.png,其中 outside_default.png,outside_default.png为问题规模,outside_default.png为递归的子问题数量,outside_default.png为每个子问题的规模(假设每个子问题的规模基本一样),outside_default.png为递归以外进行的计算工作。

情形一

如果存在常数outside_default.png,有901166df70e75f671e214fb0d1edf6fa.png(可不严谨地视作多项式地小于)

outside_default.png

情形二

如果存在常数outside_default.png,有d0906e649c70cab6e456a4a93a3796f7.png

6de24ae6c722fb50f9f1b9e0e66223f7.png

情形三

如果存在常数outside_default.png,有

4fa34abdeffbff380920cd5634f3a00b.png(多项式地大于)同时存在常数outside_default.png以及充分大的outside_default.png,满足outside_default.png

outside_default.png

关于主定理的思考

在实际应用中,主要用主定理来计算在递归算法中的复杂度为多少,操作的时候主要看的就是a和b的相对大小的复杂度表达n ^ (log_b a)和f(n)之间的关系,来决定谁占主要因素。如果是小于,对应情形1,复杂度就直接为O(n ^ (log_b a)),即占主要影响的是递推造成的问题数量的增加,比如二叉树的遍历;如果是大于,对应情形3,那么占主要因素的就是合并这些小规模问题时候的操作,一般来说这种时候比较少,因为合并占据太多资源证明问题减小规模的方向不太好,使得恢复成本还是太大;最典型的一种是相等,对应情形2,比如二分搜索算法,这时候的结论是神奇的O(n ^ (log_b a) * log n),一般取的就是上面epson = 0的那种情况,这时候其规模缩小带来的问题增加以及合并的成本相当,其总的复杂度是其中之一的复杂度乘以log n。

一个神奇的事情是,这个公式在进行时间和空间复杂度分析的时候,方法和结果都是一样的,一定程度上体现了时空的统一性。

关于这个公式的详细证明,其实用到基本的等比数列求和公式就可以了,但是这里我重点想强调的是这里O(f(n))符号标记的真实意义。

给定两个定义在实数某子集上的关于outside_default.png的函数outside_default.pngoutside_default.png,当outside_default.png趋近于无穷大时,当且仅当存在正常量outside_default.png,使得对于所有足够大(sufficiently_large)的outside_default.png,都有outside_default.png的绝对值小于等于outside_default.png乘以outside_default.png的绝对值,那么我们就可以说,当outside_default.png时,outside_default.png也就是说,假如当且仅当存在正实数outside_default.png和实数outside_default.png0,使得对于所有的outside_default.png,均有:outside_default.png成立,我们就可以认为,outside_default.png

实际应用中,g(x)是一些标准的,不带系数的幂函数,对数函数和指数函数的乘积,f(x)是我们实际问题中遇到的需要计算复杂度的函数,不同于o(x)表示的极限下的无穷小量,大O的渐进符号表示的是一个无穷大的大的程度究竟是多少,用的是x趋于无穷的上极限来定义的。这里很能体现主定理所描述的思想,比如一个多项式,其增长速度由其最高项的次数来决定,指数则远远快于多项式也远远快于对数式。而对于系数这件事情我们不关心,只是常数部分罢了。目前非量子的计算机,对于任何多项式级别的算法都很有信心,但是指数级别的算法我们总是需要相反设法去化简。

主定理的工程化思考

在实际计算机算法复杂度分析的时候,和这里理论上说明的有两点差别。其中一个就是我们在工程上还是很关心系数的,毕竟10x的时间变成x的时间,相当于要缩短到10%的时间完成同一项工作,这已经是很不得了的工程优化了,以前可能要第二天才能同步的数据现在可以提前1天了。但是,这种优化,计算机科学家是看不上的,因为在主定理的体系下,丝毫没有缩减其在无穷规模下所需要的运算时间的级别。

另一个差别也是源于这个定义的数学化和理想化。我们考察的是问题规模趋于无穷时候的增长速度,但实际问题虽然有规模很大的时候,但是和无穷还是两回事。因此我们把什么变量作为这里无穷考察的对象都是有偏差的,比如我们做query分析,query长度作为n,可是我们却会限定query不可以超过128个字等等,那这个规模其实是很有限的,哪怕指数级别的复杂度其实并不是扛不住,这里算法上有科学价值的复杂度上的优化,有时候还不如一些直接的工程优化。因为你处理的是一个不存在的无穷大的问题,而实际问题的规模其实是很有限的。再举个例子,我们在分析并行的分治算法复杂度的时候,理论上a的值就是1,即分解出来的问题都可以同步完成。但实际上,问题完成速度又快有慢,得等最慢的那个完成,而cpu的核数,hadoop或者spark集群给你提供的计算节点数实际上是远小于你真实需要并行的数量的,假设最大1000个同时并行的任务,那提速就顶多1000倍,时间变成1 / 1000,这便是一件并没有提升理论算法复杂度的一项并行优化了,但是在工程上目前确是几乎唯一,也有效的并行计算框架了。我们的计算速度也很大程度上受益于了这样1000倍的提速,这个绝对提升实在比那推演到无穷规模的不屑有实际意义多了。

这个就是计算机科学和工程的区别,前者注重理论完备,后者则经世致用。我们应当用前者当成一把尺子来计算一个理论上的极限,用后者给我们的经验去不断达到前者,而在一定时候,用理论反过来指导我们努力的方向,不至于走向一个死胡同,犯那种发明永动机的错误。

好了,到此,我们整个基本定理系列的文章就全部结束了,从算术开始,到代数,微积分和离散数学,借着这个线索又过了一遍数学世界各个领域的精华思想,让我有一种谈笑有鸿儒的兴奋感,也希望你能有所收获,谢谢支持,我们下个系列再见!

0cac21fd4180f64fd5f311646888e314.gif

我们是谁:

MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!

fcbc8466fcea5a86418d3d95ea5b2804.gif

aa5e91b709f7f51997b0c623a9c417eb.png

748a46ddc4a4feb05ff860ab53158684.png

扫描二维码

关注更多精彩

聊一聊数学中的基本定理(四)——微积分基本定理

Gilbreath原理中的数学与魔术(九)——Max Maven作品选

魔术的逻辑(三)——明明是假的,但为何奇迹依旧美妙?

扒一扒那些叫欧拉的定理们(十二)——经济学里的欧拉定理

f2d610a3819b65343196c13b0c4cfd1c.gif

点击阅读原文,往期精彩不错过!


推荐阅读
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 图片添加二维码水印教程
    本博客介绍一下用jdkawt实现图片加文字水印和图片水印的方法一、图片文字水印原来图片加上文字水印后图片二、图片加图片水印原来图片:水印图片:添加水印后的图片: ... [详细]
  • 【疑难杂症】allennlp安装报错:Installing build dependencies ... error
    背景:配置PURE的算法环境,安装allennlp0.9.0(pipinstallallennlp0.9.0)报错ÿ ... [详细]
  • 开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • vlfilecopy(findfile(vllist>string(10811110311146103105102)))(vll的简单介绍
    本文目录一览:1、一段lisp代码求解释2、运 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
author-avatar
空白画叶子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有