关于“2”这个数字
2013-04-02 22:48
411 查看
突然意识到最近思考的很多问题里面都有“2”在作怪。今天写一篇文章,记录下来我的这些闪念,
首先计算机是二进制的,最起码我们现在接触到的计算机是这样。
第一次接触二进制的时候,就觉得无比奇怪。因为以前的思维里都被十进制占据了,一时无法接受它。我们的老师一如既往的只告诉我们我们神奇的计算机是用的神奇的二进制,但却不解释究竟是为什么。不知道各位当初有没有和我一样的困惑。
后来学组成原理,学到里面的运算的时候,发现在二进制里,只需要一些与非运算和移位,就可以实现加减乘除。当然这里面需要一些技巧,比如乘三需要当前一步减一,染后下一步加一;以及除法的加减交替法等等。前人很巧妙的解决了这些问题。
能存,能取,能进行各种运算,如果将这些数字对应到实际的事物,计算机就可以解决很多人脑不容易解决的问题。
再仔细想一下,这简简单单的0和1,它却几乎能表示万物。
如此巧妙,让我很好奇到底是谁聪明至此,发明了它。然后我google到二进制的发明者是莱布尼茨,而他最初的灵感是源于《易经》里的阴阳学的一些理论。
恍然大悟,0和1,恰好对应到阴和阳。
这时又突然想到中国的一句古语;“太极生两仪,两仪生四象,四象生八卦。”而古代中国八个卦象是可以去计算一切我们所碰到或即将碰到的事物的。当然你可能不信这套,但我只想说它不是迷信,是有科学依据的。具体的依据也不是我所能解释的。
想到这里,不禁觉得妙不可言。
回到最近, 这几天在学习算法。发现了一些共性。
关于算法,我们研究最多的就是排序问题。
大部分普通的排序算法是n的平法阶的,比较快的一些呢,一般都是nlogn阶的。当然有线性的排序算法我们不去考虑。
这些比较快的算法里面,如分治策略的排序,快速排序等,递归的时候都是将整个问题一分为二,将可能性落在其中的一个子问题里,每次递归代价缩小一半(当然这里对快排指的是随机快排)。仔细回想一下,我们很多递归的问题都是用的分治策略,一分为二,分而治之。然后,就起到了意象不到的效果。
为什么是“2”?为什么只分成2份?既然分成二份以后算法得到优化,那么其他的划分呢?分成三份或者十份行不行?这里的二份一边是十分之一,一边是十分之九又会怎样呢?
先说为什么不分成更多的份数吧。我的理解是,既然我们想分成更多份,不妨取一个极端,对n个数排序,分成n份。哦,谁都看的出来,这么一分,效果和没分一模一样。那么至少能说明趋近于这个想法的这个趋势是不好的,它渐进地弱化了我们划分所取得的优化效果。
而不均匀的划分呢,如一边是十分之一,另一边是十分之九,这样递归以后,你会发现,它的步骤和将其均等的分成十份是一模一样的。
用一句话来总结呢,就是如果你分的很细,那么你在遍历每个子问题的代价会变大。大到什么程度呢,在n个数分成n份时,我们的划分已经无效了。
神奇的“2”进制,神奇的“2”分天下。
首先计算机是二进制的,最起码我们现在接触到的计算机是这样。
第一次接触二进制的时候,就觉得无比奇怪。因为以前的思维里都被十进制占据了,一时无法接受它。我们的老师一如既往的只告诉我们我们神奇的计算机是用的神奇的二进制,但却不解释究竟是为什么。不知道各位当初有没有和我一样的困惑。
后来学组成原理,学到里面的运算的时候,发现在二进制里,只需要一些与非运算和移位,就可以实现加减乘除。当然这里面需要一些技巧,比如乘三需要当前一步减一,染后下一步加一;以及除法的加减交替法等等。前人很巧妙的解决了这些问题。
能存,能取,能进行各种运算,如果将这些数字对应到实际的事物,计算机就可以解决很多人脑不容易解决的问题。
再仔细想一下,这简简单单的0和1,它却几乎能表示万物。
如此巧妙,让我很好奇到底是谁聪明至此,发明了它。然后我google到二进制的发明者是莱布尼茨,而他最初的灵感是源于《易经》里的阴阳学的一些理论。
恍然大悟,0和1,恰好对应到阴和阳。
这时又突然想到中国的一句古语;“太极生两仪,两仪生四象,四象生八卦。”而古代中国八个卦象是可以去计算一切我们所碰到或即将碰到的事物的。当然你可能不信这套,但我只想说它不是迷信,是有科学依据的。具体的依据也不是我所能解释的。
想到这里,不禁觉得妙不可言。
回到最近, 这几天在学习算法。发现了一些共性。
关于算法,我们研究最多的就是排序问题。
大部分普通的排序算法是n的平法阶的,比较快的一些呢,一般都是nlogn阶的。当然有线性的排序算法我们不去考虑。
这些比较快的算法里面,如分治策略的排序,快速排序等,递归的时候都是将整个问题一分为二,将可能性落在其中的一个子问题里,每次递归代价缩小一半(当然这里对快排指的是随机快排)。仔细回想一下,我们很多递归的问题都是用的分治策略,一分为二,分而治之。然后,就起到了意象不到的效果。
为什么是“2”?为什么只分成2份?既然分成二份以后算法得到优化,那么其他的划分呢?分成三份或者十份行不行?这里的二份一边是十分之一,一边是十分之九又会怎样呢?
先说为什么不分成更多的份数吧。我的理解是,既然我们想分成更多份,不妨取一个极端,对n个数排序,分成n份。哦,谁都看的出来,这么一分,效果和没分一模一样。那么至少能说明趋近于这个想法的这个趋势是不好的,它渐进地弱化了我们划分所取得的优化效果。
而不均匀的划分呢,如一边是十分之一,另一边是十分之九,这样递归以后,你会发现,它的步骤和将其均等的分成十份是一模一样的。
用一句话来总结呢,就是如果你分的很细,那么你在遍历每个子问题的代价会变大。大到什么程度呢,在n个数分成n份时,我们的划分已经无效了。
神奇的“2”进制,神奇的“2”分天下。
相关文章推荐
- 关于本地管理的Extent分配使用 Uniform 方式时,如何设置这个数字
- 关于6这个数字
- 关于这个野指针
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- 关于摄像机的理解,刚学的很多都会有这个疑惑
- 关于mysql中int(1)中int后面的数字
- [华硕UL] 求助关于AI RECOVERY RECOVERY, 求助 每次开机都会提示有AI RECOVERY REMIND 让做备份,不知道这个有什么用,是备份系统的隐藏分区还是别的东西
- 一个字符串去除里面的数字,把剩下的字符输出 和 一个字符串计算最大单词的长度并输出这个单词
- [iOS]关于UISearchBar, 看这个就够了
- 输入一个字符串,将其中的连续数字字符组成整数,并放入数组中,在主函数中打印这个数组及数组的个数。
- 关于写这个博客的原因(一些心路历程)
- 关于这个错误 error C231: 'INT0': redefinition的原因以解决
- 关于远程桌面出现:“由于数据加密错误,这个会话将结束。请重新连接到远程计算机。”
- 关于Android这个名字。。。
- Java指定长度随机生成的字符串,且这个字符串必须包含大小写字母和数字
- 关于UISearchBar, 看这个就够了
- 关于ios端与安卓端使用input 限制只能输入数字
- 开发者不得不知的Android权限说明(转)(关于权限这个更清晰)
- 关于浮点数的问题,我再做一个字体设置的时候总有问题,现在看了这个文章,受到了启发
- [转]关于GI/IR(我想理解这个应该具备一定财务知识才行)