武汉大学《算法设计与分析》教学课件-1幻灯片.ppt

武汉大学《算法设计与分析》教学课件-1幻灯片.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * 观察1.1 算法的合并2个数组的大小尺寸分别n1和n2时,如果其中n1=n2的,设n = n1+ n2。算法的比较次数是n1=n-1。如果2个数组的元素个数n1=n2?,所需的比较的数目是?n / 2=n-1。 * 自底向上的归并排序 保持变量s,它的大小以被合并的序列。 最初,s被设置为1,并且在每次迭代中的外while循环被加倍。 ?i +1的,+ s和i+吨定义以被合并的两个序列的边界。 第 1 趟排序将长度为 n 的待排序记录看作 n 个长度为 1 的有序子序列,然后将这些子序列两两合并。完成第 1 趟排序之后,将得到 lgn 个长度为 2 的有序子序列(如果 n 为奇数,则最后还有一个长度为 1 的子序列)。第 2 趟排序是在第 1 趟的排序的基础上,将这 lgn 个长度为 2 的子序列两两合并。如此反复,直到最后得到一个长度为n的有序文件为止。从这个排序过程来看,二路归并排序是从将长度为 1 的子序列排序变化到长度为 n 的有序序列,因而是自底向上的。 * * * * * * * * * * * * * * * * * * 小o记法(非渐进紧确上界) * * * * * * * * * * * * * * * * * * * * * 顺序查找 二分查找 * 例如: 来自线性有序集,例如,整数集的元素。类似的问题有,如排序,找到的中间值,第k个最小的元素,等等。 * 设A[1 .. n]的n个元素的序列。确定是否一个给定的元素X是否在序列A中 * 扫描中的条目,每个条目与x比较。 如果在的?比较,1???n,则搜索成功,即X = A [J],J,则返回; 否则的话,则返回0值表示一个不成功的搜索。 * * 如果预先知道A中的元素是升序排列,那么有没有更有效的算法? * 在一般情况下,序列A [...]是一个非空的升序排列的数组,X为需要查找的值。A [mid]为数组中间的元素,比较X与A [mid]。 如果X A [mid],那么它必定是一个A [mid]之后的元素。 因此,我们只需要搜索x在A [中期+1 ...高]中查找。 * * * * 定理1.1 ?????????????????????????? 二分法算法的比较次数,对于一个排序的数组的大小n,其最大不超过LOGN?+1。 * 选择排序 基本思路 设A[1 .. n]的n个元素的数组。 首先,我们发现的最小元素,并将其存储在A [1]。 接下来,我们发现在余下的n-1个元素的最小值,并将其存储在A [2]。 ?我们将继续这样,直到第二个最大的元素存储在[n-1]。 * * * 算法分析 选择排序执行的元素比较次数为n(n-1)/ 2。 * 插入排序 1.从第一个元素开始,该元素可以认为已经被排序 2.取出下一个元素,在已经排序的元素序列中从后向前扫描 3.如果该元素(已排序)大于新元素,将该元素移到下一位置 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5.将新元素插入到该位置后 6.重复步骤2~5 * * * 插入排序执行元素比较的次数的n-1n(n-1)/ 2。 * SELECTIONSORT和INSERTIONSORT算法效率都不高,n个元素进行排序所需的操作次数与n2成正比增长。 ????是否有更有效的算法? * 归并排序 指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。 归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 假设我们有一个数组A [1... M],三个索引p,q,r符合1?p?qr?m,两个子阵列一个[P... Q]和A [q +1... R]是分别是升序排序。我们要使A[p…r]进行升序排序。 设两个有序的子序列(相当于输入序列)放在同一序列中相邻的位置上:array[low..m],array[m + 1..high],先将它们合并到一个局部的暂存序列 temp (相当于输出序列)中,待合并完成后将 temp 复制回 array[low..high]中,从而完成排序。 * 首先取两个指针s和t,分别指向一个A[p]和A [q +1]。准备一个空数组B [p..r]用来作为一个临时存储数组。 每一次,比较的元素A[s],A [t],将小的值加入数组B中,如果他们是相等的,将A[s]加入B数组。 接下来,更新指针:如果一个A[s]≤A[t],s+1,否则t+1。 这个过程一直执行到s = q+1或t = r+1。在第一种情况下,追加其余的元素A [t

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档