算法分析和设计2005改1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析和设计2005改1

算法和数据结构 算法分析与设计 郭彦宏 2005年改 程序=算法+数据结构 软件:刻画现实世界,解决现实世界中的问题 语言:实现的工具 算法:解的描述(程序的灵魂) 数据结构:现实世界的数据模型 程序=算法+数据结构 算法 定义 为了完成特定任务指令的有穷序列 好的算法的特性 确定性 有穷性 可行性 健壮性 输入、效率和存储要求 输出 算法的复杂度与评价 时间与空间 方法: 1、事后分析 2、事前分析 几个例子(问题) 表达式解释 6+5*4=? 字符串匹配 串“ABCAC”出现在另一个串“ABCABCACAC”的第几个位置上 排序 一个序列,如何最快地对其进行排序 压缩编码 AAAABBBCDDE?? 图的最短路径 地理研究中的交通网络 例1.1 A[1…10]={1,3,5,6,7,10,22,27,34,56} 在A中搜索x=22 算法1.1 Linearsearch j←1 While(jn) and (x≠A[ j]) j ← j+1 End while If x=A[j] then return j else return 0 例1.2 templateclass T int Max(T a[], int n) {// 寻找a [ 0 : n - 1 ]中的最大元素 int pos = 0; for (int i = 1; i n; i++) if (a[pos] a[i]) pos = i; return pos; } 二分搜索 算法1.2 binarysearch low ←1;high ←n;j ←0 while (low≤high) and (j=0) mid ←? (low+high)/2? if x=A[mid] then j ←mid else if xA[mid] then high ←mid-1 else low ←mid+1 end while return j ?Logn ?+1 合并两个已排列的表 A=[3,5,7,18,19,46] B=[1,4,6, 16,17, 23,31, 45,47] C=[ 3, 5,6,7,16,17,18,19,23,31,45,46,47] Comment: B [[ p…r ] s ←p;t ←q+1;k ←p while s ≤q and t ≤r if A[s ] ≤A[t ] then B[k ] ←A[s ] s ←s+1 else B[k ] ←A[t] t ←t+1 end if k ←k+1 end while if s=q+1 then B[k…r] ←A[[t…r ] else B[k…r] ←A[s…q] end if A[p…r] ←B[p…r] templateclass T //(C语言) void Merge(T c[], T d[], int l, int m, int r) {// 把c [l: m] 和c [m: r] 归并到d [l : r] ;. int i = l, j = m+1, k = l; while ((i = m) (j = r)) if (c[i] = c[j]) d[k++] = c[i++]; else d[k++] = c[j++]; if (i m) for (int q = j; q = r; q++) d[k++] = c[q]; else for (int q = i; q = m; q++) d[k++] = c[q]; } 选择排序 for i←1 to n-1 k ←i for j ←i+1 to n if A[j]A[k] then k ←j end for if k≠i then end for templateclass T //(C语言) void SelectionSort(T a[], int n) {// 及时终止的选择排序 bool sorted = false; for (int size = n; !sorted (size 1); size- -) { int pos = 0; sorted = true; // 找最大元素 for (int i = 1; i size; i++) if (a[pos] = a[i]) pos = i; else sorted = false; // 未按序排列 Swap(a[pos], a[size - 1 ] ) ; } } 插入排序 例如,

文档评论(0)

189****7685 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档