算法设计(第3章蛮力法)_第1页
算法设计(第3章蛮力法)_第2页
算法设计(第3章蛮力法)_第3页
算法设计(第3章蛮力法)_第4页
算法设计(第3章蛮力法)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、算法设计(第算法设计(第3 3章蛮力法章蛮力法)蛮力法一些问题只能采用蛮力法去求解蛮力法设计简单,用其求解一些小问题也是可接受的3.1 字符串匹配输入:两个字符串T和P输出:T中P首次出现的位置T中不包含P那么返回1T (Text), P (Pattern)3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w stsoft3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w stsoft3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w sts

2、oft3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w stsoft3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w stsoft3.1 字符串匹配蛮力法:从左到右扫描T,检查T中是否含有子串Pm icrosofw in d o w stsoft匹配成功,返回位置索引匹配成功,返回位置索引53.1 字符串匹配字符串匹配算法Algorithm Brute_Match(T, P: string)begin let i = 0, n = |T|, m = |P|; while (i nm) d

3、o let j = 0; while (j Ai) then Ai1 Ai当k = n时算法结束;否那么令 k = k+1, 转第2步 排序问题输入:任意一个长度为n的数组A输出:这组数的一个重排列A ,其满足A0A1An13.4 冒泡排序冒泡排序算法Algorithm BubbleSort(A: int)begin let n = |A|; for k = 1 to n-1 do for i = 1 to nk do if (Ai-1 Ai) then (Ai-1, Ai) (Ai, Ai-1);end时间复杂度O(n2)3.5 假设干最优化问题最优化问题:在问题的可行域F中找到一个解x,使

4、得某目标函数值f(x)最小或最大。约束条件:解x应满足某项约束c(x)=true连续优化问题:解的数量可能有无穷多组合优化问题:解的数量有限时,总是可以用蛮力法求解,但算法效率可能很低。3.5 假设干最优化问题最近点对问题0-1背包问题最优子集和问题最大独立集和最小顶点覆盖旅行商问题最近点对问题输入:二维平面上n个点的集合P输出:其中距离最近的两个点最近点对问题蛮力法:计算出P中所有顶点对之间的距离,并取其中距离最小的一对顶点。时间复杂度O(n2):存在改进可能?最近点对问题的蛮力算法Algorithm Brute_ClosetPoints(P: Point)begin let d_best

5、= +, n = |P|, a = b = -1; for i = 0 to n-2 do for j = i+1 to n-1 do let (dx, dy) = (Pi.x-Pj.x, Pi.y-Pj.y); d = dx*dx + dy*dy; if (d v_best) then v_best v; S_best S; return (v_best, S_best);end子集和问题的最优化版本输入:一组n个整数的集合S,以及一个目标数z输出:S的一个子集S*,使其元素之和不大于z的情况下尽可能地大子集和问题的最优化版本蛮力法:检查S的每个子集 S,找出其中满足约束且元素之和最大的一个

6、子集0-1背包的特殊情况最大独立集最大独立集/最小顶点覆盖图的独立集:图中两两互不相邻的顶点所组成的集合。输入:一个无向图G = 输出:G中顶点数最多的一个独立集最大独立集最大独立集/最小顶点覆盖蛮力法:穷举V的所有子集V,判断每个子集是否为独立集,并从中选出规模最大的一个时间复杂度O(mn22n)最大独立集问题的蛮力算法Algorithm Brute_IndependentSet(V: set; E: set)begin let I = ; foreach V Powerset(V) do let independent = true; foreach (u V) do foreach (v

7、 Vu) do if (u,v) E) then independent false; break; if (independent = false) then break; if (independent = true |V| |I|) then I V; return I;end最大独立集/最小顶点覆盖最小顶点覆盖图G = 顶点覆盖:V的一个子集V,它包含E中每条边的至少一个端点。输入:一个无向图G = 输出:G中顶点数最少的一个顶点覆盖最大独立集/最小顶点覆盖最小顶点覆盖蛮力法:穷举V的所有子集V,判断每个子集是否为独立集,并从中选出规模最大的一个时间复杂度O(mn2n)最小顶点覆盖问题

8、的蛮力算法Algorithm Brute_VertexCover(V: set; E: set)begin let C = V; foreach V Powerset(V) do let cover = true; foreach (u,v) E) do if (u V v V) then cover false; break; if (cover = true |V| |C|) then C V; return C;end最大独立集/最小顶点覆盖最大独立集与最小顶点覆盖的关系?给定图G = ,IV是G的一个独立集,当且仅当V I是G的一个顶点覆盖旅行商问题输入:一个加权连通图G = 输出:通过G中所有顶点且距离最短的一条回路旅行商问题蛮力法:穷举图中n!条回路,并从中选出距离最短的一条时间复杂度O(n+1)!)旅行商问题的蛮力算法Algorithm Brute_TSP(G: Graph; w: int,)begin let d_best = +, L_best = ; foreach L Per

温馨提示

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

评论

0/150

提交评论