目录(点击切换)
本文节选自《计算之魂》电子版:
/儿计算之魂/之间的数字求和,复杂度为OO。有了上面三个值,挑出最大的一个即可。至于每个子序列的总和最大区间如何求,可以用到我们后面讲的递归算法,具体的细节我们先省略过去,大家可以存疑,有计算机科学基础的读者朋友可以自己思考。这里我们把结论先告诉大家,这种算法的耗时为OKLog&)。对于几万个数据的序列,计算量为百万级,这上比方法2的十几亿又小了不少〈是方法2的干分之几)。如果你能够想出这种方法,那在计算机科学的理论上就具备了成为四级工程师的条件,因为你已经掌握了计算机科学的一个精髓与否要看这个人能否做出实际的产品,除了理解算法,过上述方法依然不是最好的。方法4,正、反两遍扫描的方法。分治算法。当然,一个工程师合格还需要在实际工作中历练。不这种方法也是在方法2基础上的改进。在方法2中,我们是先设定区间的左边界p,在此条件下确定总和最大区间的右边界4。然后再改变左边界,测试所有的可能性。但实际上,这种方法在无形中已经找到了总和最大区间的右边界。我们从这个想法出发,来寻找一下线性复杂度,即OA的算法,步骤如下。步骤1,先在序列中扫摘找到第一个大于零的数,假定这个数不存在〈《即所有的数字非零即负),那么整个序列中最大的那个数就是所要找的区间。这时算法的复杂度是O(E)。因此,
计算之魂电子版
我们可以不失一般性地假设第一个数字是正数,如果这个数小于或等于零,则从序列头部删除,如此反复,最终删除序列头部连续排列的负数或零。步骤2,我们用类似于方法2中的做法,先把左边界固定在第一个数,然后让4d=2,3,…,天,计算SGg),以及到目前为止的最大值Maxr和达到最大值的右边界\"。步骤3,如果对于所有的4,都有S(19)三0,或者存在某个go,当9>9%,上述条件满足,这个情况比较简单。当扫描到最后,即4=开时,所保留的那个Maxy所对应的就是我们要找的区间的右边界。为什么呢?因为从第二1个数往后加,无论怎么加,都是负数(或者零),所以右边界不可能往038后延长了。为了便于大家理解,//第1章//毫厘干里之差一大口概念/我们使用例题1.3中的数据,从前往后一步步票加计算一遍,计算结果放在了表1.1中。从算得的结果可知Max广39之和曲线上用圆圈表示的位置。加.3,相应的一10。在相应的图1.2中,就是前向宗计表1.1序列中的元素、前向累计之和和后向累计之和序号|12了站一一号6显8910|12|雪3元素|1.5|-12.3|3.2|-5.523.2|3.2.|一4|一地.2|34.2|5.4|一7.8|11一4.9前向虹妆1.5|-10.8|-7.6|-13.1|
计算之魂azw3
10.1|13.3.|11.9|-0.3|33.9|39.3|31.5|32.6|27.7=we27.7|26.2|38.5|35.3|40.8|17.6|14.4|15.8|28|-62|-11.6|-3.8|-4950人MaarxbJe30|一<一一一一~一2010N0本-ER9SU-20一一元素-一-前向累计之和”一一后向累计之和图1.2序列中元素的值、前向累计之和以及后向累计之和这时候,我们还不知道左边界在哪后。其实只要把这个问题倒过来看就可以了。我们从后往前计算向际计之和,结果见表1.1的第4行。用同样的方法,我们可以计算出后向累计的最大值(Warp=40.8),以及达到这个数值的位置(二5),它就是左边界,如图1.2所示。这样整个总和最大的区间就是[r]=[5,10]。如果一个工程师能够起出这种方法,就具有成为三级工程师的潜力了,因为他能完全理解在解决问题时哪些计算是必需的、不能省略的,哪些则是多余的。所谓提高一台计算机软硬件的效率,就是将多余的计算全部挑出来省掉。在这个问题中,如果35(19)在某个地方小于零,然后就变得比较麻烦了。比如我们将上小于零,这个事情就可的那组数据改动两个,如表1.2所示,这时如果我们直接采用前面步骤3的方法就会出现问题。039
计算之魂思考题答案
| 计算之魂合并区间 | 计算机之魂吴军扫描版 |
| 计算之魂吴军电子版 | 计算之魂作者吴军简介 |
| 计算之魂 epub | 计算之魂百度云下载 |
综上:计算之魂介绍值得推荐阅读

评论已关闭!