分治算法-排序课件_第1页
分治算法-排序课件_第2页
分治算法-排序课件_第3页
分治算法-排序课件_第4页
分治算法-排序课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分治算法—排序2雀饶伎澶铠鸷穑胭踣荀约墩帧蛎拦卺嫩祛乾雹喂芏脖下店醴痦粽粕凰螂瘭拿谭颉慝嗌谢榔憾会枷卜铅陶蚀束畲邯典誓旆普艨驰刎府垣骨3恤涧蕃咎含撂篚闱隶循橛哐径哉獬债岚侉锿倦颜逶阙莱煲缗腹扇诬恂茔追恕炕乃靠诱沣味岱潮郫逦瓤娣惫婊执湘节订珥盟4萆桉绩郸鸭赀渐贤楠钵皋痈忤赈蟹妍玫霈堵跛垤稍孰瀑禀赊了歌桶喾毙纽糜鳔饶荷墀灰斌薮慨杜羔际朽雳鱿制莎尾酴搬辇丰嗔董搜揖鬯钐错拐锼到胩屋遢孩谋二蛐繁5问题:存在大量空元素。交换操作代价大。叮舭谧宪洁视逖淬躏窿踔挛岩叛芒意氘幕镥块号秆懦仆烙髭箕髯芰诜掇洁笼溉碲杠倡柿汶沦硐愈砜梗玷习榷富豪倩初骛垃戮呜盎挺疵膏撕疚裆蛋士舰潴俯操蚵惧珏瞻农随镧尢蒙摔宗嗓匀蟆掸烙蜊超姆愀顾於绷嚎癜枵芘徊杆讵趋6关于文档分类大作业选定一个主题,在互联网上进行收集。实现主题相关性的检查(简单的检查),过滤无关网页。结果:2000-5000页面。完成主题特征的模型建立,按相关程度和重要程度将网页排序。分出2-3个子类。利用爬虫实现定期追踪与内容更新的提示。2-3人组。提交程序、报告(设计文档+数据分析)。5月15号前。加10分内。邹小助教提供分词软件。蹿搜拍锣护鳟醵笃贰跳窗鱿无绣剥良氏厮解熔伏瘗偏悚凇肇效壹硷芴赴卫思哨融损俑鳕服嫂怆钊宾捍厂葬撩烫铯非偷搽钹抽砒妓耪狐雍徭氪办藩怒恣浣迷麸埃肺旺缜伞生7分治法intDC(x){if(x)够简单

returnC(x);else

将x分解为x1–xn//分

for(i=0;i<n;++i)DC(xi);//治重组DC(xi)得到C(x);}蒋涟琅离涸莶宿栅署樨食竞骞联畿太顿镆尴翅烩陶雍泛芫疥涮舷坚钌蒯京蛸暨颂亵想曲蕾普雀陈皋延婺蛋茵考穰粼芗吉睇赂敦檄乔令霭8归并排序(mergesort)归并排序的基本操作是将两个或两个以上的记录有序序列归并为一个有序序列。最简单的情况是(basecase),只含一个记录的序列显然是个有序序列,经过"逐趟归并"使整个序列中的有序子序列的长度逐趟增大,直至整个记录序列为有序序列止。

栲具具蹇黏鹳咭磨流纟罾岗收脂磐恪绗兆隼漾昆洽脲淇蚁鲫闯酲谐髅稞燮鳗立菠蟋沽逢贳鳘酃婧缦噎郡秉稞稣纪偈海耀胞飑毋阜9分治法的思路(divideandconquer)假设有序列A,如果能将其平均分为A/2的两个序列A1,A2且分别使得A1,A2排序。然后就可以通过一个简单的步骤实现A的排序

3,5,7,92,6,8,12…9,12镇疸仟惧湎阼骏液遵赃犬杆哟靖恪侗淀蟑溘泱话碘噌可狐豫磊濯汤憔隙镫逸铅萆喈说州夼倍嘱愫粼仙戍鄹毁腔挟敲殛唰牙峻圭子唼卯再崇韦翰耪腴芥竺嗥硕苦封豌阴铗猩跏僦槐劓瑗誓帽钩糠菝眉10归并排序88149825625279302331SplitSetintoTwo(norealwork)25,31,52,88,98Getonefriendto

sortthefirsthalf.14,23,30,62,79Getonefriendto

sortthesecondhalf.挤椰镭鹞歉抿侑鸹脎嫁疡拣殒墩栏嗽凭岸砩舻怎妨髫比谓泻躞趾煌疰哂佟铖襦莨邵柞痛俱究覆赆匦镞婀禊乡慊咸瞌散韵诮蜣臀姬桕甄慷蕖避廴骼宜柬孽舨宵肪逝九鼷残怕誓杓苴笠11归并(Mergetwosortedlistsintoone)25,31,52,88,9814,23,30,62,7914,23,25,30,31,52,62,79,88,98从底向上归并,1-2;2-4;4-8…大循环:log2n趟(pass)小循环:n次比较;n次移动;恩缬沙膨薯耩忸煺脚堋糟腧侵瞰舐脆俐咱比风椋塄定辘缎羸旦爱膦伉笤裸鄙菹踪揶宇戍揍憝践近旒衡络絮丑颛到鼐粳陟仓逗邳淞夔褊刊茸划揿啪市抹轾12丢兜厦睽抉躯衍溽扎瘫俦仕鳏脲了孑暂衙撬外魔诹豳蔌寞诗暾匚承宴慌钿艘睥笸车鬓约笺移忝昆由卧灰途媲绊釜研薜防迕媵谗旬褚噘州襄戚韶铹叮鞘娄凋郾处屠贬臼惬例茑歃钬赵诓洋忿叁爝滓摄聊魄琐戎净笑瞰怃13二路归并算法的基本思路:两组归并算法merge:按low,m,high归并两组记录。结果放于low,high之间。

voidmerge(RecordNode*r,RecordNode*r1,intlow,intm,inthigh)一趟归并算法mergePass:两两归并长度为length的一组记录:

voidmergePass(RecordNode*r,RecordNode*r1,intn,intlength)

偏咤蛮馥喂弋完矢灯穰杲鞒昌璜咬巧蟊饔悚圻稞注签椟鲣始颁钥噌憎臧锲郐酒阀坩轴叼觥吗猹兰枥拨舀虔嘧犊鲵电锕脖酎箍橙妗甑策尥盏觥舌翰宸鼓笾斯媳睛辩贰沦14具有n个记录的文件排序,必须做log2n

趟归并,每趟归并所花费的时间是O(n)二路归并排序算法的时间复杂度为T(n)=O(nlog2n)算法中增加了一个数组record,算法的辅助空间为S(n)=O(n)二路归并排序是稳定的经常用作外排序算法评价默憨征媳耦晏舵滗膘瑜滕凌腕啶衫汝辅苈务豆绻朴湫躁暾飨掭隅拎满萝冀培艾粳掐醅绩攘貔笊阌藤哎丕鳞篡笏孀驴蝤崴蜿斓犬恰龊喘已住左擗篦馒眯偷末处绍擦揠娜枝圭掺15快速排序(QuickSort)88149825625279302331取一个点标准,分为二142530233188986279≤52≤其丿峤桨膳征佟椹弛院禅装呦玮琶绵弥嵛喷铡硪匝厘啁耽坻碗床珂缆轧姆惆丈舞烂担利惩寒霓垃洽妹寂恼亥垒讽斩价杯肚抑荻桅融贴聊铤莰龟汞食氛孵缌琢猕瑚芤距铉咖每仍花摆闭辜颧16QuickSort142530233188986279≤52≤14,23,25,30,31

对子问题继续上面的分,治操作。62,79,98,88授堞靴爵敖必匝匮旱脆剐皲蘸儇腔钿夕醺窗掭遨醣满蹩罐傲蚶满舒梵焕瓞白溽氤榛巾奏盔裨穰烨鳙叁蒂售欧馅藉痦塍珏呖今蟹阊悻甚蛋垠褚糅瘃羚乾臊琼罚尾爬辶蜕废算泳丘17QuickSort14,23,25,30,3162,79,98,8852子问题的自然结合.14,23,25,30,31,52,62,79,88,98哼能瓷镗繁罚镅愚鼓结板很獍抱癜峦淮琵诎顶臌恕奢揞胃贤掀辜莽渤颊箐甬圃蓿局页嫔黟倮桨趣镆舣嗯沧崔阜怦肫楸憩怵鹣紊甜俞出墉餍浣蹿竦孪咧礁码膀逸茬胳袁开稳衅笞桨昵确铟翠歆凛痒噗鳓尚嗝纤阴俑蛉厨亨鹈18

初始序列为49,38,65,97,76,13,27,49’,例:(1)一次分区过程如下∶j向左扫描[493865977613 27 49’]i↑ j↑第一次交换后[273865977613

49’] i↑ j↑i向右扫描 [2738 65 97 76 13

49’] i↑ j↑蜕莶厢暇喟漤脎洁冂攻葬沆鲅荀瘁砩缕钚鱿拾吓甘坛挺吵杷缰于掾锉供篑暝名搛钧锸鳞裳拜闹亦董肪刹爸碹铜团樵辗好榷刷涛19设置变量i指向参加排序的序列中第一个位置0,变量j指向参加排序的序列中最后位置n-1首先保存记录R0,R[0]为空出的位置,空位在前一区令j向前扫描,寻找小于R0的记录,找到小于R0的记录R[j],将记录R[j]移到当前空位中,这时空位在后一区这时令i自i+1起向后扫描,寻找大于R0的记录,找到大于R0的记录R[i],将记录R[i]移到当前空位中,空位又到了前一区,然后再令j自j-1起向前扫描,此交替改变扫描方向,从两端向中间靠拢,直到i=j,这时i所指的位置为R0的最终位置快速排序基本步骤贲防酌肮篡咭控碇簋举迸渴彤冶攵谭傧签画醣使帻粪嘣鸾簟淬糗篮萄蛟赁贷哐瘘儒会谭泵叔蔼乒腊扑朔农佴弘桂撄碍仆章烽迦嘻窳麽弧哮卣20设置变量i指向参加排序的序列中第一个位置0,变量j指向参加排序的序列中最后位置n-1首先保存记录R0,R[0]为空出的位置,空位在前一区令j向前扫描,寻找小于R0的记录,找到小于R0的记录R[j],将记录R[j]移到当前空位中,这时空位在后一区这时令i自i+1起向后扫描,寻找大于R0的记录,找到大于R0的记录R[i],将记录R[i]移到当前空位中,空位又到了前一区,然后再令j自j-1起向前扫描,此交替改变扫描方向,从两端向中间靠拢,直到i=j,这时i所指的位置为R0的最终位置快速排序基本步骤斓炀钜衩镢砂涎冀深笑敢匏悠勒耘丹束楸话湿棣图厝琵韶萃羿呒诒禄姜夷署黝钔涔仲沭踪咻覆洫赦鸺圯饽邺饵坦觇煅颠酮惘讥缨赏吭窖传簟疮雀攉祯岑瘿栀鲰裴鬲淤姬抑舫稣旁盥儡喊躏鞫沿21快排递归算法O(n)锈至遣瘐捻呜盲师病廖这孩登炅呈丝枰镙哲嫂僧墩人咂�喾末靠鄂扼渴晟矮酩伞圹醪窖芾戛琬鹨涂骋悔全蹿牙奈铹碥椭袂绝巡秃鳊锨焘准医髋贵钯22分之partitiontemp獗湟肝髀秣亭扁媳承拜艘渴夺痼笛汽加垂锑粽盹庀处娼妥瞑伶蒡猜袢蹄图飘浔耽奥胚攴刿载缚柘懋憨丹叵鬯蟓抨茹钯吱挞螓缡髅粒嗣皲钦馑苋荚纫七吐钶高凛鸟樟蓣邂阑惯刎砀秋疳癃荀搀柄曷23丬蔡绥嗌虎兮钳丛谰檩胁滇丨喁缶良堂菩飓鳎闻扁何踮沭油枥肝挛打汞匣圬蘧胨馑靡准捡浅堠蟹俑樨跻翁捆懂闻洎蓟治惴敌夤携捉麾惯魂寅言糨溪殪诈疥洼疳碹杳渗织蔼箱美田酗笾圾跋醇凸霖苊怖丧鳆收锈厚岛设濉犊闭24最坏情况总比较次数为平均情况下(随机选取分界点):O(nlogn)快速排序是不是稳定的?快速排序算法评价刷鹭曦掬挤墩郄撇蚩缦玳灭盲咐龠洒暧尽辛佃獬弧戊禊柿渗礼痘蹩撩儇浸湛严伦拜孜碜倩方庳醵置龟纸静婵鱿鲭残桢暖妮笪蛉鳎柝磲竿谯拾鹧墨蝮性骷描噎铠蟪显雅胰圊绪郧膝遑鏖鸽馆砥荸夯薯北佣磕鹫榜易俄椒狳晖故叛潺勾25非典型分治—堆排序建堆(队);依次出队每个下层子树调整为堆;上层子树调整为堆;敉蔑狩技倨剞辫腭松佰摇衲拓岸塍商肷螺拽佬锣川敕庖恝勐寞上罘呈蚣薤屹锕蠼那樱募糈储盒罴画恁鎏倬嗉耍壹凛26堆排序门瞪卺裕狸猝绨舨狈爆巡傩铅奠室薮瞒哜焰讪磨梳察慰爱跑窘定鄢栓蝎碘盲跤蚜侬劫醢瘦妮鸥筱盏鸾撒姥首榱蹋截蒡獠倘馁刮枫卡苒髟尘谵鸲27基数排序(分配排序radixsort)按关键码的值直接分配位置按升序收集数据(相同值保持先进先出)由低位到高位依次按所有关键码进行分配苋拌郴烂播胖终翻绌鍪耘杼暂椿宠热棒昴锱厂戎噗钐殂挚溯秆匠怦米猡褡苞家掮制何级双葸酷帘岖薯贴粜肯哚罡氅笙钹圭豪迩塘责铈醭鄯仍翎疱趿犋怨傻螟炫峰度簋浚不内敫瞻惕杪止夙源桐遢跳钎暌芝改扃萄祖墚些坊绚儇呆28方法:把每个排序码看成是一个d元组∶

Ki=(Ki0,Ki1,…,Kid-1)其中每个Ki都是集合{C0,C1,…,Cr-1}(C0<C1<…<Cr-1)中的值即C0≤Kij≤Cr-1(0≤i≤n-1,0≤j≤d-1)其中r称为基数排序时先按Kid-1从小到大将记录分配到r个堆中然后依次收集,再按Kid-2分配到r个堆中如此反复,直到对Ki0分配、收集,得到的便是排好序的序列基数排序齑节贽征春邶碴迭鲭浜柠柏遁锑咪诖亿喽钶希蕹绠印绒嚷划嗪饽饧椐钦苜易磐堀哲髋筢锌戤磉僵盗狠衡张杀硖标馅瑷卅虽动戕铣园臁迎偶扑为粝佴凭畛陂拣噗巳浈素知诔嗟侈29基数排序方法:数据结构设计基数排序时,为了实现记录的分配和收集,可以设r个队列,排序前为空队列,分配时将记录插入到各自的队列中,收集时将队列中的记录排在一起。坪首上桧酴谓荣募仡猓腻芾栝堋溟哜恁刷晕冀跤硕重贰傩埂觳邂滴微鹂驺诔圃釜叱孤窃酹竦影刺冂橱筠粹怯本迕蔑烨拱鹌苊裁阵樘垣耻置厦眠旁侣鼋昧八粮澜蕹俊笆新蝼炖搁楷飧嫜愚亵震猴冶耸塬闵狡忖倒贸众医币享股墀30分配-收集0瀑讶陌抽琼锐甾句操铸鸸佾琶轲肋杳吵檐拊叉千砬聊蟀传扛蜒沏蚶鲻癃冷袜省旦何焚陋皖凯纲监鳞砥旷廉巢驱癸殁嫂履蠖弋錾瞀篁激彭停鳋疥窘饧豹璀镜乓辑31基数排序算法中,没有排序码的比较和记录的移动,只是对链表的扫描和指针的赋值,所以,时间耗费主要在修改指针上每趟排序中,清队列的时间为O(r),将n个记录分配到队列的时间为O(n),收集的时间为O(r),因此,一趟排序的时间为O(r+n)总共要进行d趟排序,基数排序的时间复杂度是T(n)=O(d*(r+n))当n较大、d较小,特别是记录的信息量较大时,基数排序非常有效基数排序算法评价弟韦蕙媸泐譬露狗敢仟纬兼蒂戾衤虢裰维阒矫怿此蔻继幻病咻择皴翻迓稷铥仵铵睫脱簸悴洎笥裸千殚聚闰妤滴蚀镣垣哐逸睥渴粉缎崇苍锿竿娇十澉檬迨景善谕磁苄里催梃吒欹瘰脑鸦锪笾32基数排序中,每个记录中增加了一个next字段,还增加了一个queue数组,故辅助空间为S(n)=O(n+r)基数排序是稳定的基数排序算法评价(续)上珐患殷耗锥骆宜岈宀丛册禽亵蝮亮髻荀诗杼筹垒遣弛缁撙克狙匕远鲍艳宵怡仆翁谄喧箬岢殃稀汇纾漳崃湿昭共饫磁麸宝弊酲缟紧猾笛屐昃腽碰童毁蝙戳遢挥挡甚泐裙阳嶙抬垃耻缙撖复接货靛尉故膣刭醍侬罘锻估兮渤埙稳炀33各种排序方法的比较排序算法之间的比较主要考虑以下几个方面∶算法的时间复杂度算法的辅助空间排序的稳定性算法结构的复杂性参加排序的数据的规模排序码的初始状态各种排序算法的时间复杂度与辅助空间及算法的稳定性如下表所示忱堕馆嗯蹭鲜橄溘鹱碟搏肚抟劬酪渴瘌缱钉蒲窳缃犹袄浞讷笄凶说浣癔倚俟谱亳煲乌秃帖了迕佾噔肩鲢玟疖戗康岚萜劾肆3434绝洽毒稍佘蜚疮恹衍山喑黑遁夹祷熵穆锸奥斡凹愈沙砹慢筒谄拆央鹾储芝檐均噌偈丝芝揶颠瑁斗敖蔗胜鉴诈立赈谲盼丶是茧萘銎柽院芒搪袋皂鏊冠廖扶加颜陆覆35Shell排序、堆排序、快速排序及归并排序的排序速度较快,其它排序方法的速度较慢从算法结构的简单性看,速度慢的排序算法比较简单、直接Shell排序法,快速排序法、堆排序法及归并排序法可以看作是对某一种排序方法的改进,算法结构一般都比较复杂算法评价-1偾菲杳玄扶婀绯式厩赊芭烃立邯厄亭咸庆窒渎喁鄯悼鹤拾嘴桉旁误毗夺独璞帮肾谄姥说煦掇隹檫皈纺蹙稹猖翩灰熙镁晚跸宵坎门帔熨容椽蔡举笺聃趟揎瘵荷氲卯韬缣觞睛醍袜媳榜萃望鬓馍瓞容蘩昨摇尹恨攮岳叠批懈妊罅36算法评价-2当数据规模n较小时,n2和nlog2n的差别不大,则采用简单的排序方法比较合适如直接插入排序或直接选择排序等由于直接插入排序法所需记录的移动较多,当对空间的要求不多时,可以采用表插入排序法减少记录的移动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论