排序算法外文翻译.docx

上传人:b****2 文档编号:24240676 上传时间:2023-05-25 格式:DOCX 页数:13 大小:112.22KB
下载 相关 举报
排序算法外文翻译.docx_第1页
第1页 / 共13页
排序算法外文翻译.docx_第2页
第2页 / 共13页
排序算法外文翻译.docx_第3页
第3页 / 共13页
排序算法外文翻译.docx_第4页
第4页 / 共13页
排序算法外文翻译.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

排序算法外文翻译.docx

《排序算法外文翻译.docx》由会员分享,可在线阅读,更多相关《排序算法外文翻译.docx(13页珍藏版)》请在冰豆网上搜索。

排序算法外文翻译.docx

排序算法外文翻译

中文3355字

 

毕业论文

外文文献译文及原文

 

学生:

学号:

院(系):

理学院

专业:

信息与计算科学

指导教师:

2014年6月20日

 

排序

1内部排序

目前已经发明了许多不同的排序算法,我们将在本书讨论其中大约25个算法。

这样颇使人惊讶的众多方法,实际上还只是迄今已经想出算法的一小部分;在我们的讨论中,将略取许多现在已经被废弃的方法,或者紧紧的提及他们。

为什么会有那么多的排序算法呢?

在计算机的程序设计中,常有“为什么会有这样多的x方法呢?

”的问题,其中x就是某个问题的集合。

这个问题的答案是:

每种方法都有它的优点和缺点,对于某些数据和硬件的配置来说,它就有可能超过其它的方法。

可惜,还不知道“最好”的排序方法;目前许多最好的方法,都是针对的、特定的机器,根据特定的目的,对特定对象进行排序所得到的。

用RudyardKipling的话说:

“有69种进行部落安置的方法,而且它们每一种都是对的。

一个好的想法是学习每种排序方法,它能帮助你具体的应用做出明智的选择。

幸而,学习这些算法并不是一项艰难的任务,因为他们都以有趣的方式相互关联着。

在本章开始时,已经定义了将在排序研究中使用的基本术语和符号:

记录

(1-1)

有待安排你键码

的非减次序进行排序,实质上要求找出一个排列

使得

(1-2)

在本节中,我们讨论内部排序,此时,有待排序的记录个数足够小,以致整过过程都能在一台计算机的高速存储器中实现。

在某些情况下,会要求在存储器中对这些记录物理地重新排列,使得它们的键码按次序排列。

但在另外的情况下,则可能只要指明这个排序的某个辅助表就能够了。

如果每个记录或键码要占用相当多的计算机存储器,则构造一个新的指向记录的链接地址表,并处理这些链表地址,而不是到处移动庞大的记录,通常更好些。

这种方式称为地址表排序。

如果键码很短,但是记录的附属信息很长,则为了获得更高的速度,这个键码即可用作链接地址,这就是所谓的键码排序。

另外一种排序方案利用了包括在每个记录中的一个辅助链接字段;链接的方式是使这些记录最终被链接在一起形成一个直接的线性表,每个链接指向下一个记录,这就是所谓的表排序。

在用地址表方法或表方法进行排序之后,诸记录可像所希望的那样,重新排成递增的顺序。

只要求足够容纳所有记录的新区域。

后一方法通常比头一个方法快两倍,但是几乎要两倍的存储空间。

在许多应用中,全然不需要移动记录,因为对于随后的寻址操作而言,使用链接字段通常已经足够了。

我们将通过4个方面来说明将要深入讨论的所有排序方法,即

a)算法的一个英语语言描述;

b)一个框图

c)一个MIX程序;

d)一个排序方法的实例,它应用与某个16个数的集合。

为了方便起见,MIX程序通常都假定键码是数值,并且能放到一个单子中去;有时,甚至把键码限制为一个字的一部分。

次序关系“<”将是通常的算术次序;记录将只由键码

组成,而没有附属的信息。

这些假定使得程序更短和更容易理解。

读者应当发现,使用地址表排序或表排序,将通过MIX程序进行。

1.1通过计数进行排序

作为研究内部排序的一个简单示例,考虑在本章开头的“计数”思想。

这个简单的方法是这样一个思想为基础的,即在最后排好序的序列中,第j个键码恰恰大于(j-1)个其它键码,换言之。

如果知道某个键码确实超过27个其它键码,而且没有两个键码相同,则在排序之后对应的记录应当进入位置28。

所以,这个思想是比较每对键码,计算有多少个键码小于每一个特地给的键码。

进行这些比较的明显方式是

对于

对于

但容易看出,这些比较中有一半以上是多余的,因为没有必要把一个键码同它自己进行比较。

没有必要比较Ka和Kb。

我们只需要比较

对于

对于

只需比较Ki和Kj。

因此导出了下列算法。

算法c

本算法通过一张辅助表COUNT[1],......,COUNT[N],,对于小于一个给定键码的键码个数进行计数,来实现用键码

对记录

进行排序,算法结束时,COUNT[j]+1来确定Ri的最后位置。

C1:

[清空COUNT]把COUNT[1]至COUNT[N]都置成0。

C2:

[对i进行循环]对i=N,N-1,....2实施步骤C3,然后结束次算法。

C3:

[对j进行循环]对j=i-1,i-2,...,1实施步骤C4.

C4:

[比较Ki和Kj]如果Ki

注意:

次算法不涉及记录的移动,它类似地址表排序,因为COUNT表确定这些记录最后安排,但是由于COUNT[j]高速我们往何处移动Rj,而不是哪一个记录应当被移动Ri的位置,故它与地址表排序略有不同。

通过计数进行排序,还有另外一个方法,从有效的观点看,它十分重要的:

它主要应用于许多相同的键码出现,且所有的键码都落入范围u≤kj≤v的情况,其中(v-u)很小。

这些假定看来十分严格的限制,但是事实上将看到这一思想有不少的应用。

列如,如果把这个算法的应用与键码的头几位数,而不是整个键码,则这个文件被部分地排序,而且这项任务将相当简单。

1.2通过插入进行排序

有一类重要的排序技术,是以1.2节开头处提到的“玩桥牌者”的方法为基础的,在考察记录Rj之前,假定以前的记录

已经排好序,然后已经把Ri插入到已经排好的诸多记录的适当位置。

这个基本主题可以由若干有趣的变形。

1.2.1直接插入

最简单的插入排序也是最显然的。

假定

,而且已经把记录

重新排好序,使得

把新键码Kj依次地和Kj-1,...,k3,k2..进行比较,直到发现Rj应当插入到Ri和Ri+1处。

如下列算法所示那样,宜于把比较和移动操作组合在一起,互相穿插,由于Rj“被安放到适当的层次中区”,这种排序方式通常称为筛选或陷入技术。

算法S(直接插入排序)重新安排记录

到适当位置;在完成排序之后,它们的键码是有序的,即有

S1[对j进行循环]对于j=2,3,...,N实施步骤S2到S5;然后终止本算法。

S2[给i,K,R赋值]置i←j-1,K←Kj,R←Rj

S3[比较K:

Ki]如果

则转向步骤S5.

S4[移动Ri,i减值]置Ri+1←Ri,然后i←i-1。

如果i>0,则返回到步骤S3。

S5[R进入Ri+1]置Ri+1←R。

1.2.2二叉插入和两路插入

在一个直接插入排序期间,在处理第j个记录时,平均说来要把它的键码大约同1/2j个此前已排好的键码进行比较,因此所实施比较的总数大约是1/2(1+2+3+...+N)=1/4N2,当N适当大时,这就已经非常之大了。

在6.2.1小节,将研究“二分查找”技术,该技术使我们能够在仅仅lgN次仔细选择的比较之后,就指出在那里插入第j项。

例如,当插入第64个记录时,可以由对K64和K32进行比较开始。

如果是小于,则就把它同K16进行比较,但如果是大于,则就把它同K65进行比较,等等。

于是仅仅做6次比较之后,就可知道R64应查如得位置。

插入所有N项所作的比较总数就大学时NlgN,这是对于1/4N2的实质性的改进。

而6.2.1小节表示,它早在1946年就由JohnMauchly在计算机排序的第一个公开讨论中述及。

二叉插入的困难时,它只解决问题的一半。

在已经发现记录Rj应插入到那里之后,仍然需要移动大的1/2j个此前已排序好的记录,以便Ri腾出位置,所以总共的运行时间实质上仍同N2成正比。

当然,一个灵巧的程序员可以相处各种方式来减少所需要移动的数量;头一个这样的技巧,如表2所示,是早在50年代时就提出的,表中排序的头一项被放置在一个输出区域的中心,而且通过向右或向左移动腾出空间。

此法比普通二叉插入节省一半运行时间,其代价是程序稍微复杂一点,使用此法时,还可以不必使用N个记录所需要的更多的空间;但对于这个“两路”插入的方法,将不作更详细的叙述因为已有更多有趣的方法。

1.2.3Shell方法

如果有这样的一份排序算法,它一次只把诸多项目移动一个位置,则它的平均运行时间最好也是同N2的成比例。

因为在这个排序过程中每个记录都必须平均遍历1/3N个位置。

因此,如果直接对插入作实质性的改进,就需要一种新原理,它是这些记录作长距离的跳跃,而不是一些短促的小步移动。

这样一个方法是由Donald.L.Shell于1959年提出的,我们称它为Shell排序,表3说明该法的一般想法:

首先把这16个记录分成8组即(R1,R9),(R2,R10),...,(R8,R16)。

分别对每组记录进行排序。

使我们进到表3的第二行,这称为“第一次扫描”。

表3增量递减排序

Shell排序也叫做“减少增量的排序”,因为每一遍通过增量h来确定,使得我们对相距h个单位进行排序。

任何序列h1,hi-1,..,hn都可以使用此方法,只要最后的增量h0=1就行。

小结

既然我们已经接近着极为冗长的一章结尾,我们最好“整理出”已研究过的最为重要的事实。

用于排序的一个算法,是一个这样的过程,它重新安排一个文件的所有记录,使得其码处于递增的次序,这有序的排列是有用的,因为它把相同的记录放到一起,允许有效的处理按同一个键码排好的多个文件,这导致了有效的检索方法,而且是计算机的删除看上去不那么的混乱。

如果无论是对那一种应用,或无论正在使用什么样的计算机,仅仅有一两种排序方法,它比所有的排序方法都好,那么,事情倒好结局,事实上,每种方法都有各自的优点。

因此所有的方法都要去记,因为在特地的环境中,它们是最好的。

参考文献

[1]Bell,D.Theprinciplesofsorting.TheComputerJournal1(1958):

71–77.

[2]Bose,R.C,andNelson,R.J.Asortingproblem.JournaloftheACM(JACM)9,2(1962):

28–296.

[3]Halstead,M.H.ElementsofSoftwareScience.Operating.andProgrammingSystemsSeries,vol.7.Elsevier,1977:

71–77.

 

Sorting

1InternalSorting

Manydifferentsortingalgorithmshavebeeninvented,andwewillbediscussingabout25oftheminthisbook.Thisratheralarmingnumberifmethodsisactuallyonlyafractionthealgorithmsthathavebeendevisedsofar;manymethodswhicharenowobsoletewillbeomittedfromourdiscussiong,irmentionedonlybrieflywhyaretheresomanysortingmethods?

Forcomputerprogrammingthisisaspecialcaseofquestion,”whyaretheresomanyxmethods?

”,wherexrangesoverthesetofproblems;andtheansweristhateachmethodshasitsownadvantagesanddisadvantages,sothatitoutperfomstheohersonsomeconfigurationofdataandhardware.Unfortunately,thereisnoknow“best”waytosort;therearemanybestmethods,dependingonwhatistobesortonwhatmachineforwhatpurpose.InthewordsofPudyardKiplin,’therearenineandsixtywaysofconstructingtriballays,andeverysingleoneofthemisright.”

Itisagoodideatolearnthecharacteristicsofeachsortingmethod,sothataninerlligentchoicecanbemadeforparticularapplicationsFortunately,itisnotaformidabletasktolearnthesealgorithms,sincetheyareinerrelatedininterstingways.

Atthebeginningofthischaperwedefinethebasicterminnologyandnotationtobeusedinourstudyofsorting:

therecords

(1-1)

Aresortingintonondereasingorderoftheirkeys

esentiallybydiscoveringapermutationp

(1)p

(2)...p(N)suchthat

(1-2)

Inthepresentsectionweareconcernedwithinernalsorling,whenthenumberofrecordstobesortingissmallenoughthattheentireprocesscanbeperformedinacomputershigh-speedmemory.

Insomecaseswillwantrecordstobephysiscallyrearrangedinmemorysothattheirkeysareinorder,whileinorhercasesinmaybesufficientmerelytohaveanauxiliarytableofsomesortwhichspecifiesthepermutation.Iftherecordsand/orthekeyseachtakeupquiteafewtablewordsofcomputermemoty,itisoftenbettertomakeupanewtableoflinkaddresseswhicpointtotherecords,andtomanipulatetheselinkaddressesinsteadofmovingthebulkyrecordsaround.Thismethodiscalledaddresstablesorting.Ifthekeyisshortbutthesatelliteinformationoftherecordsislong,thekeymaybeplacedwiththelinkaddressesforgreaterspeed;thisiscalledkysorting.Othersortingschemesutilizeandauxiliarylinkfieldwhichisincludedineachrecord;theselinksaremanipulatedinsuchawaythat,inthefinalresult,therecordsarelinkedtogethertoformastraightlinearresult,therecordsarelinktogethertoformastraightlinearlist,witheachlinkpointingtothefollowingrecord.

Allofsortingmethodswhichweshallexamine“indepth”willbeillustrateinfourways,bymeansof

a)anEnglish-languagedescriptionofthealgotithm,

b)flowdiagram,

c)aMIXprogram,

d)anexampleofthesortingmethodappliedtoagivensetofnumber.

AnanalysisoftherunningtimeofeachsortingwillbegivewiththeMIXprograms.

1.1Sortingbycounting

Asasimpleexampleofthewayinwhichweshallstudyinernalsortingmethods,lectusconsiderthe“ounting”ideamentionednearthebeginningofthissecion.Thissimplemethodisbasedontheideathatthejthkeyinthefinalsortedsequenceisgreaterthanexactly(j--1)oftheotherkeys.Puttingthisanotherway.ifweknowthatacertainkeyexceedsexactly27others,thecorrespondingrecordshouldgointoposition28aftersorting.Sotheideaistocompareeachpairofkeys,countinghowmanyarelessthaneachparticularone.

Theobbiouswaytodothecomparisonsisto

.For

For

Butitiseasytoseethatoverhalfofthesecomparisonareredundat,sinceitisunnessarytocompareakeywithitself,anditisunnessarytocompareKawithKbandlatertocompare..with....weneedmerelyto

For

For

Algorithmc(comparisoncounting)

ThisalgorithmsortsCOUNT[1],...,COUNT[N]onthekeys

bymaintaininglessthanagivenkey.Aftertheconclusionofthealgorithm,count[j]+1specifiesthefinalpositionofrecord

C1[clearCounts]SetCount[1]throughCOUNT[N]tozero.

C2[Looponi.]PerformstepC3,fori=N,N-1,...,2;thenterminatethealgorithm.

C3.[Looponj.]PerformstepC4,forj=i-1,i-2,...,1.

C4.[CompareKi,Kj.]IfKi

Notethatthisalgorithminvolvesnomovementofrecords.Itissimilartoanaddresstablesort,sincetheCOUNTtablespecifiesthefinalarrangementofrecords;butitissomewhatdifferrentbecauseCOUNT[j]tellsuswheretomoveRj,insteadofindicatingwhichrecordshouldbemovedintotheplaceofRj.(Thusthe“inverse”ofthepermutationp

(1)...p(n)isspecifiedintheCOUNTtable;seeSection1.1.1).

Inourdiscussionprecedingthisalgorithmwefailedtoconsidertheposibilityofequalkeys.Thisisapotentiallyseriousomission,forifequalkeyscomplicatedtoequalCOUNTsthefinalrearrangementofrecordswouldberathercomplicated.Fortunately,asexercise2shows,AlgorithmCgivesthecorrectresultnomatterhowmanyequalkeysarepresent.

ProgramC(Comparisoncounting).

ThefollowingMTXimplementationofAlgorithmCassumesthatRjisstoredinlocationINPUT+j,andCOUNT[j]inlocationCOUNT+j,for1≤j≤N;rI1=i;rI2=j;rA=Ki=Ri;rX=COUNT[i].

Therunningtimeofthisprogramis13N+6A+5B-4units,whereNisthenumberofrecords;AisthenumberofchoicesoftwothingsfromasetofNobjects,namely(

)=(N2-N)/2。

1.2SortingbyInsertion

Oneofimportantfamiliesofsortingtechniquesisba

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1