版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、排序思想及其应用、排序问题、n数a1、a2、an,然后设计有效的排序算法,生成输入顺序的重排a1、a2、an,从而生成a1 a2 an (或a1 a2;an)。顺序统计基于排序知识。在由n个元素组成的集合中,第I顺序统计信息是该集合中I的较小元素。排序问题的分类1,显式排序问题2,隐藏排序问题,介绍几种排序方法1,计数排序2,快速排序3,堆排序,显式排序问题,1,输入序列通常是具有n个元素的数组。2,如果要排序的对象是记录而不是单个数据,则排序基于主键字段键(整数、实数、字符串等)。密钥域密钥可以有多个,但必须明确第一个关键字、第二个关键字、的优先级。对于两个对象,如果第一个关键字的值相同,则
2、比较第二个关键字,然后比较具有较大关键字值的对象。张学,【问题说明】某小学最近得到赞助,决定为其中一部分学业成绩优秀的前5名学生提供奖学金。期末,每个学生的3门成绩为:语言、数学、英语。首先,按总分从高到低,如果两个学生总分相同,然后按语学分从高到低,如果两个学生总分和语学分都相同,固定的学号小的同学带头,这样,每个学生的顺序是唯一确定的。作业:先根据输入的3个班级的成绩计算总分,然后按照上述规则排序,最后按排名顺序输出前5个学生的学号和总分。前5名同学中奖学金因人而异,所以你必须按照上述规则严格排序。例如,如果正确答案中的前两行输出数据(每行两个数字:学号,总分数)为3360 7 279 2
3、79,则这两行数据表示在:总分最高的两个学生的学号将按7,5的顺序显示。这两个学生的总分都是279(总分等于输入的语言、数学、英语三科成绩之和),但学号为7的学生的语言成绩更高。如果前两个输出数据为: 5 279 7 279,则根据输出错误进行处理,并且不能得分。输入文件scholar.in包含n行:行1,正整数n,表示在该学校选择的学生数。2-n 1行,分别表示o和100之间的z 1行中的3个数字,学号为j-1的学生的语言,数学,英语成绩。每个学生的学编号按输入的顺序为l至n(准确输入的数据的行号减去1)。给定数据是正确的,无需测试。输出文件scholar.out共有5行,每行为两个以空格分
4、隔的正整数,依次表示前5个学生的学号和总分。关键字优先排序,关键字1 :总分2关键字:语言得分3关键字:学号增加。首先,根据总分数从高到低排序。如果两个同学的总分相同,再根据语言分数从上到下排序。如果两位同学的总分和语文成绩相同,规定学号较小的同学在前面,所以每个学生的顺序是唯一确定的。输入计算方法,1,各同学语言,数学,英语分数,按输入顺序设定学号,统计各学生的总分。2.共1关键字,语言分数按2关键字,学号为3关键字的增量排列n学生。3,输出前5名学生的总分和学号。学生数n的最大限制为300,因此可以使用O(n2)的表单排序,如果根据关键字优先级比较大小,则function comp (a1
5、,S1,P1,a2,S2,p 23360 integer): boolean;两个学生的总分、语言分数和学号分别为(s1,a1,p1)和(s2,a2,p2)。Begin if S1 S2 then exit (true),比较总分 if s1a 2 then exit(true);比较总分相同的语言分数 if a1p 2 then exit(false);exit(false);(两个学生的总分、语言成绩、学号相同)End,初始化,read(n);读取此学校选定的学生数 for I :=1 to n do beginpI:=I;设置第I个学生的学号 read(ai,bi,cI);第I个学生的语
6、言、数学、英语成绩阅读 sI:=aIbIcI;第I个学生总分统计 end,排序和输出,for I :=1 to n-1 do for j 3360=I 1 to n do if comp(aj,s j,p j,a I)bI850 Ibj;C I 85燕麦cj;S I 85燕麦sj;P I 85燕麦pj;EndFor I :=1 to 5 do writeln (p I,sI);输出前5名学生的总分和学号,隐藏的排序问题,在很多算法中,排序通常用作核心子程序。许多算法(如贪婪、搜索和动态计划)需要数据排序预处理阶段,该阶段在数据处理之前按顺序排列复杂的数据对象。贪心算法的预处理过程通常包括排序,
7、因为贪心对象是数字递增或递减顺序关系。不仅是贪心的算法,很多其他算法的预处理阶段也包含顺序。包装问题,现有体积v容器和n种商品,每种商品的固定体积,无限制。你的任务是写程序,找出至少能装满多少货物的集装箱。方法: 1,按货物输入顺序搜索直接包装方案2,按从大到小的顺序搜索包装方案第二种方法比第一种方法好得多的原因1,直接判断解决情况(排序后第一种商品的体积v),或排除无用的商品(序号大于v的商品)。2、可以生成理想的初始解决方案。第二种方法可以产生理想的初始解。在进行最佳修剪的时候,最希望的是早点得到近似最佳解决方案的最佳解决方案。(阿尔伯特爱因斯坦)。直接搜索而不排序可能会产生不需要的初始解
8、决方案。首先排序,然后搜索,可能会生成理想的初始解决方案。直接搜索而不排序可能最适合初始解决方案,但这取决于输入数据的分布或搜索策略的优化。早期解决方案的理想度会影响搜索效率,纪念品分组,题目说明春节即将到来,学校学生会让乐乐负责新年晚会的纪念品分发工作。为了使参加聚会的同学收到的纪念品的价值比较均匀,他必须按照价格对购买的纪念品进行分组,但是每个组最多只能包含两个纪念品,每个组的价值总和不能超过给定的整数。为了保证在尽可能短的时间内发放所有纪念品,乐乐的集团数量最少。你的任务是在所有分组体系中找出最少的分组,然后编写输出最少分组的程序。输入文件group.in在n 2行:行1中包含整数w,表
9、示每个纪念品价格总和的上限。行为2表示购买的纪念品总数的整数n;第3-n行2包含表示该纪念品价格的正整数Pi(1Pin)。输出文件group.out仅由1行组成,包含一个整数,即最小的分组数,采用比较有价值的贪心策略,1,将所有纪念品分组,每个纪念品的价值不能超过上限w。2、为了使集团数量尽可能少,每个纪念品集团的价值也使用比较均衡的战略。方法:先按价值增长的顺序排列纪念品。然后设置序列的开始和结束指针I,j。最初为i=1,j=n。然后,将贪心策略向左移动尾部指针j,向右移动i:从头到尾不超过两个项目的价格和w,则将这两个项目归为一组(I I 1,jj-1);否则,尾部的项目将单独分组(jj-
10、1)。一直延伸到Ij。按照价格增加的顺序排列纪念品;ans 3360=0;初始化最大组数 I :=n;j :=1;初始化头部和尾部指针 repeat if aIajI;writeln(ans);输出最大组数、一些有用的排序方法、1、计数排序2、快速排序3、堆排序、计数排序的想法和应用范围:如果要排序的关键字是整数类型,并且数值范围小,则基本思路:对于每个输入元素x,确定小于x的元素数。有了此信息,可以将x直接放在最终输出数组的位置。例如,如果有17个小于x的元素,则x属于第18个输出位置。如果多个元素相同,则此方案不能放置在相同的输出位置,因此需要稍作修改。数据结构,输入数据:a 1.n;排序
11、结果:b 1.n;临时存储:c0.k,其中Ci表示小于或等于I的元素数,程序,Procedure Counting-sort(A,b,k);Begin fillchar (c,sizeof(c),0);阵列c Qing 0 for j-l to n do cAj-cAj1;相同元素数统计信息 pc;包含元素数,如pII for I-2 to k do cI852;cI-1包含小于或等于c I I的元素数将for jn downto 1 do每个Aj放置在B的相应位置 Begin BcAjCAjCAj-1;EndEnd;Counting-sort,例如a=(2,5,3,0,2,3,0,3)。显然
12、k=5。对于阵列A和阵列c,运行第2行(for jl to n do cAj cAj 1),然后运行第4行(for I 2)运行c I c I-1后,对于数组C,(b),图c-e在第5行上(for j-n down to 1 do begin bCAj)End)在重复第1、2、3次后,对于数组b和次数组c,如果要排序的关键字是整数类型且数字范围较小,则使用摘要(1)。计数排序的时间复杂性为O(n k)。显然,这种在线时间内排序的效率远远优于基于比较的排序方法。另外,计数排序的稳定性也很好。具有相同值的元素在排序顺序中的相对顺序与初始顺序相同,第一次出现时,在排序顺序中排在前面。summary(
13、2),如果需要输出排序结果,则可以使用“在位置”数组a,而不用单独使用数组b来存储排序结果,除非需要使用临时存储c。你考虑一下这个问题吗?(提示:在保留第1行和第2行的同时,适当地添加几个语句即可。)。摘要(3),计算顺序时,临时数组c和p起到较小的作用。如果n个元素不同(每个Pj=1),则每个Aj位于排序序列中的c Aj位置。如果共有c a j个元素的多个元素小于Aj的值(如Aj),则按第一个顺序排序序列的cAj-pj1.按顺序排列在c a j位置。因此,序列A中小于Aj的元素为cAj-Pj,大于Aj的元素为n-cAj。独木舟之旅,我们计划划独木舟旅行活动。独木舟可以在港口租到,其间没有差别
14、。一只独木舟只有两个人,乘客的总重量不能超过独木舟的最大承载能力。我们想在这次活动中最大限度地减少我们的支出,所以必须弄清楚能容纳所有游客的独木舟的最小数量。任务:文本文件KAJ .在IN中,请写读独木舟最大承载能力、乘客数、每名乘客重量的程序;根据给定的规则计算安置所有旅客所需的最小独木舟数。结果文本文件KAJ .输出到OUT。输入格式:文本文件KAJ .IN的第一行包含整数w,80 w 200,这是单个独木舟的最大运载尺寸。文件中的第二个动作整数n,1 n 30000表示乘客数。下面n行的每行表示该乘客的重量5.包含w的整数。输出格式:文本文件KAJ,整数所需的最小独木舟数。必须输出到OU
15、T的第一行。要想贪心,最小化独木舟的条带,两个人乘坐的独木舟数量必须最多。人们自然会有贪心的策略,按递增顺序调查每个元素v,尽可能与其他较重的元素v 匹配(v和v 的重量之和不大于独木舟的最大承载能力w)。现在将考察旅客v的重量设置为I 1,如果其他旅客v的重量大于i(2*iw),则检索v的最大重量,如果k: k=i,则重量为I的所有旅客上船(尽可能两者)。如果I的乘客数是奇数,则增加1艘船)如果ki,则找到k和I重量的旅客中最小人数j,增加j艘船,在k和I重量的乘客中,分别选择j登上2,如果其他乘客重量为i(2*iw),则每个I的旅客各乘坐1艘船,基本思想将所有因素从小到大排列查找匹配元素的算法的时间复杂性为O(n)。更特别,此问题的每个元素的重量范围较小,因此可以使用计数排序方法,以便在O(w n)时间内按顺序排序。因此,总时间复杂性为O(w n)。数据救援船的最大容量为w。乘客人数是n。目前没有登机的旅客中重量为I的旅客数为bI;乘客重量范围是min weight.max weight=5.200,计算过程,read(w,n);读取最大运输和乘客数 fillchar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理信息技术应用
- 护理用药管理制度
- 布病患者的社会适应
- 护理查房中的临床决策支持
- 手术室环境清洁与消毒
- 2026融媒体部门面试题及答案
- 2026上海医博会面试题及答案
- 2026寿光春招面试题目及答案
- 2026思特奇面试题及答案
- 2023年贵州省中考数学试卷真题含答案逐题解析原创模拟训练卷与答案解析
- 酒品采购协议范例
- MOOC 探秘移动通信-重庆电子工程职业学院 中国大学慕课答案
- JJG 365-2008电化学氧测定仪
- 三年级下语文(部编版)古诗默写
- 高考英语高频词汇汇总清单(共1801个)
- 2014年高考作文(北京卷)“老规矩”作文公式全解
- T-GDWCA 0037-2018 高柔性多芯拖链控制电缆
- 农药销售技巧培训
- 团体心理治疗实践
- 肌电图科内讲座课件
- 校园规划课件
评论
0/150
提交评论