计算之魂吴军在线阅读(硅谷吴军计算之魂)

原创 loveyou i  2023-08-22 16:10  计算之魂吴军在线阅读(硅谷吴军计算之魂)已关闭评论
摘要:

[db:摘要]

本文节选自《计算之魂》电子版:

/计算之魂//(IntrospectiveSort,简称Introsort),它成为如今大多数标准函数库(STL)中的排序函数使用的算法,还有接下来要介绍的蒂姆排序(Timsort),它是今天Java和安卓(Android)操作系统内部使用的排序算法。蒂姆排序这个名字来源于该算法的发明人和蒂姆。彼得斯(TimPeters)。他在2002年发明了一种将两种排序算法的特点相结合(插入排序节省内存、归并排序节省时间),最坏时间复杂度控制在OUMiogN)量级,同时还能够保证排序稳定性这样一举三得的混合排序算法。节姆排序最初是在Python程序语言中实现的,今天它依然是这种程序语言默认的排序算法。蒂姆排序可以被看成是以块(它在算法中被称为run)为单位的归并排序,而这些块内部的元素是排好序的〈无论是从小到大,还是从大到小排序均可)。我们回顾一下前面的例题1.3,任何一个随机序列内部通常都有很多递增(从小到大)的子序列或者递减《从大到小)的子序列,比如表1.4所示的一个数组。表1.4数组序号|1|2|3|4|5|161718191ioltlizl13四四区17|

计算之魂吴军电子书

1819|20|21元素|12|1913161714|-6|13|24|7|16|-9|5|o0|15|6|114|1612|18l18|相邻两个数总是一大一小交共出现的情况并不多,如果我们将表1.4用图的方式表示,如图1.6所示,就会发现这个数组中的元素总是连续几个数值下降,然后连续由上升。1图1.6随机序列内部可能含有多个递增或者递减的子序列054//第1章//喜厘干里之差一一大O概念1//蒂姆排序就是利用了数据的这个特性来减少排序中的比较和数据移动的,它的大致思想如下。步骤1,找出序列中各个递增和递减的子序列。如果这样的子序列太短,小于一个预先设定的常数(通常是32或者64),则用简单的插入排序将它们整理为有序的子序列〈也称块,run)。在寻找插入位置时,该算法采3了二分查找。随序子序列一个一个放入一个临时的存储空间(堆栈)中,如图1.7所示。关于堆栈这种数据结构,我们后画大家把它理解为额外的临时存储空间即可。在医Z、W都是块,显示的长度可以理解为它们各千后将这些中讲到,这里17申,尖和、起的长度。图1.7将一个序列变成块后放到一个堆步骤2,按照

计算之魂讲的什么

规则合并这些块。合并的过程是先合并两个最栈中短的,而不是一长一短地合并,可以证明这样效归并排序中两个子序列的合并是相同的,但是为了提高效率,算法中所说的块,其忆率会高些。合并的方法从原理上讲和人2站都可以通过批处理的方式进行归并,而不需要一个个地进行。例如图1.8所展示的两个子序列在合并时,可以直接将和序列中的前四个数(7,9,13,16)一次加到Y序列的3之后,类似的,可以把Y序列列的19之后。这样成组归并的数字在中的三个数(33,36,37)接归并到X序用[]表示。当然,能够成批归并的前提是知道这些组的边界。比如当下序列中的3首先进入归并后的序列之后,接下来不仅要比较和中的7和YY中的17,而且需要知道在X序列中大于17的数字的位置(第5个,19)。如果一个个顺序扫描,就和传统的归并排序算法没有区别了。蒂姆排序中采用的是一种跳跃式〈galloping)预测的方式,至于具体怎么跳跃,有兴趣的读者可以参看参考资料。和Pttps:/gitnub.corwypythomn/cpythom/blob/mastewObjects/listsort.txt。

计算之魂吴军笔记

计算之魂吴军博士计算之魂吴军百度云
计算机之魂吴军计算之魂合并区间
计算之魂人和计算机对信息编码的差异如何评价吴军的计算之魂

计算之魂吴军在线阅读(硅谷吴军计算之魂)综上:硅谷吴军计算之魂值得推荐阅读

历史上的今天:

文章标签:

特别说明:本站不提供下载,文章采集自网络,如有侵权,联系删除文章

版权声明:计算之魂吴军在线阅读(硅谷吴军计算之魂)》,版权归 loveyou i 所有,侵删!
相关文章 关键词:

评论已关闭!