您好,欢迎访问三七文档
大学计算机-计算思维导论南京理工大学计算机学院冯元第四章算法与复杂性内容提要:排序问题及其算法递归的概念4.1排序问题及其算法1、排序问题排序问题:现实世界中十分常见,如:在一类信息中查找某个特定信息。为提高搜索效率,需要先排序。结构化数据查找与统计中的排序问题非结构化数据查找与统计中的排序问题排序问题的复杂性在哪里?4.1排序问题及其算法排序问题:本质是对一组对象按照某种规则进行有序排列。通常是把一组对象整理成按关键字递增(或递减)的排列,关键字是指对象的一个用于排序的特性。例如:对一组“人”,按“年龄”或“身高”排序;对一组“商品”,按“价格”排序;对一组“网页”,按“重要度”排序;对一组“词汇”,按“首字母”字典序排序。……4.1排序问题及其算法结构化数据表的查找与统计需要排序查找成绩为80分的所有同学?【算法A:未排序数据查找算法】StartofalgorithmStep1.从数据表的第1条记录开始,直到其最后一条记录为止,读取每一条记录,做Step2。Step2.对每一条记录,判断成绩是否等于给定的分数:如果是,则输出;如果不是,则不输出。Endofalgorithm学号姓名成绩120300101李鹏88120300105张伟66120300107闫宁95120300102王刚79120300103李宁94120300106徐月85120300108杜岩44120300104赵凯69120300109江海77120300110周峰73算法效率:读取并处理所有记录,即n条记录数据表记录数:n4.1排序问题及其算法结构化数据表的查找与统计需要排序学号姓名成绩120300101李鹏88120300105张伟66120300107闫宁95120300102王刚79120300103李宁94120300106徐月85120300108杜岩44120300104赵凯69120300109江海77120300110周峰73算法效率:读取并处理所有记录,即n条记录数据表记录数:n【算法B:已排序数据查找算法】StartofalgorithmStep1.从数据表的第1条记录开始,直到其最后一条记录为止,读取每一条记录,做Step2和Step3步。Step2.对每一条记录,判断成绩是否等于给定的分数:如果等于,则输出;如果不等于,则不输出。Step3.判断该条记录的成绩是否小于给定的分数:如果不是,则继续;否则,退出循环,算法结束。Endofalgorithm4.1排序问题及其算法结构化数据表的查找与统计需要排序学号姓名成绩120300101李鹏88120300105张伟66120300107闫宁95120300102王刚79120300103李宁94120300106徐月85120300108杜岩44120300104赵凯69120300109江海77120300110周峰73数据表记录数:n【算法C:已排序数据查找算法】StartofalgorithmStep1.假设数据表的最大记录数是n,待查询区间的起始记录位置Start为1,终止记录位置Finish为n;Step2.计算中间记录位置I=(Start+Finish)/2,读取第I条记录。Step3.判断第I条记录成绩是否大于给定查找分数:(1)如果是小于,调整Finish=I-1,如果StartFinish则结束,否则继续做Step2;(2)如果是大于,调整Start=I+1,如果StartFinish则结束,否则继续做Step2;(3)如果是等于,则输出,继续读取I周围所有的成绩与给定查找条件相等的记录并输出,直到所有相等记录查询输出完毕则算法结束。Endofalgorithm•算法效率:除极端情况外读取并处理=n/2条记录4.1排序问题及其算法非结构化数据(文档)的查找和搜索需要排序图书馆或网上有大量文档,这些文档大小各不相同。如何快速地查找一份文档?如何确定一份文档是否包含给定的一个或多个“关键词”哪些词汇是一份文档的关键词?每当用户输入一个关键词,是否要扫描所有文档?4.1排序问题及其算法内排序问题:待排序的数据可一次性地装入内存中,即排序者可以完整地看到和操纵所有数据,使用数组或其他数据结构便可进行统一的排序处理。外排序问题:待排序的数据保存在磁盘上,不能一次性装入内存,即排序者不能一次完整地看到和操纵所有数据,需要将数据分批装入内存分批处理。4.1排序问题及其算法非结构化数据(文档)的查找和搜索需要排序图书馆或网上有大量文档,这些文档大小各不相同。如何快速地查找一份文档?如何确定一份文档是否包含给定的一个或多个“关键词”哪些词汇是一份文档的关键词?每当用户输入一个关键词,是否要扫描所有文档?怎样按照关键词找到相应的文档呢?对所有文档建立关键词查询查找文档关键词索引表---倒排索引文档怎样快速找到关键词呢?哪些是关键词呢?4.1排序问题及其算法倒排索引:也称为反向索引,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。4.1排序问题及其算法2、基本排序算法内排序算法:插入法、简单选择法、冒泡法插入法排序:类似于打扑克,边抓牌,边理牌。每抓一张牌就把它插入到适当的位置;牌抓完了,也理完了。这种策略被称为插入排序4.1排序问题及其算法1274978193366505180i=2i=3i=4i=512345678910Ai=57124978193366505180A7124978193366505180A7124978193366505180A7121949783366505180A7121933495051667880Ai=9…i=57124978783366505180Ai=57124949783366505180A插入排序:递增排序示意.其中三角形左侧为已排好序的元素,其右侧为未排序的元素,实心三角形本身为待插入的元素.图中示意了为待排序元素19腾挪空间的过程,由箭头示意.空心三角形表示新插入的元素4.1排序问题及其算法INSERTION-SORT(A)1.fori=2toN2.{key=A[i];3.j=i-1;4.While(j0andA[j]key)do5.{A[j+1]=A[j];6.j=j-1;}7.A[j+1]=key;8.}O(N2)4.1排序问题及其算法简单选择法排序:先在所有数组元素中找出最小值元素,放在A[1]中;接着在不包含A[1]的余下数组元素中再找出最小值元素,放置在A[2]中;如此下去,一直到最后一个元素。这一排序策略被称为简单选择排序。4.1排序问题及其算法1274978193366505180i=1i=3i=412345678910A7124978193366505180A7121978493366505180A7121933495051667880Ai=9…i=47121978493366505180Ai=47121933497866505180A(b)选择排序:递增排序示意.其中三角形代表本轮要找的最小元素应在的位置,方形代表本轮次至今为止所找到的最小元素所在位置,三角形左侧为已排好序的元素,三角形右侧的每一元素依次和方形位置元素比较.实线双向箭头代表两个元素交换.虚线双向箭头代表两个元素需要比较4.1排序问题及其算法SELECTION-SORT(A)1.fori=1toN-12.{k=i;3.forj=i+1toN4.{ifA[j]A[k]thenk=j;}5.ifkithen6.{7.temp=A[k];8.A[k]=A[i];9.A[i]=temp;10.}11.}O(N2)4.1排序问题及其算法冒泡法排序:一个轮次一个轮次地处理。在每一轮次中依次对待排序数组元素中相邻的两个元素进行比较,将大的放前,小的放后--递减排序(或者是将小的放前,大的放后--递增排序)。当没有交换时,则数据已被排好序。4.1排序问题及其算法1274978193366505180i=11249778193366505180j=1i=1j=21249787193366505180i=1j=3…1249781933665051780i=1j=9i=9j=1807866515049331912712345678910AAAAA…1249781933665051807i=2j=1Ai=8j=17880665150493319127A1274978193366505180Ai=1j=4(c)冒泡排序:递减排序示意,其中小圆点代表本轮本次比较的两个元素,双向弧线箭头代表两个元素要相互交换4.1排序问题及其算法BUBBLE-SORT(A)1.fori=1toN-12.{haschange=false;3.forj=1toN-i4.{ifA[j]A[j+1]then5.{temp=A[j];6.A[j]=A[j+1];7.A[j+1]=temp;8.haschange=true;9.}10.}11.if(haschange==false)thenbreak;12.}O(N2)4.1排序问题及其算法外排序算法:内存:2GB待排序数据:7GB,10GB,100GB?--大数据集合这种需要使用硬盘等外部存储设备进行大数据集合排序的过程/算法称为外排序。外排序策略:排序--归并4.2递归的概念1、递归:用有限的语句定义对象的无限集合递归是一种表达相似性对象及动作的无限性构造的方法。递归是一种关于抽象的表达方法---用递归定义无限的相似事物。递归是一种算法或程序的构造技术---自身调用自身,高阶调用低阶,构造无限的计算步骤。递归是一种典型的计算过程---由后向前代入,再由前向后计算。递归的感性认识4.2递归及递归算法4.2递归的概念递归函数Fibonacci数列可以递归地定义为:F(n)=整数的阶乘可以递归地定义为:F(n)=1n=01n=1Fact(n-1)+Fact(n-2)n11n≦1n×F(n-1)n1
本文标题:计算思维导论4
链接地址:https://www.777doc.com/doc-3803243 .html