算法学习 1.1从若干实例探讨算法的思考模式.pdf
《算法学习 1.1从若干实例探讨算法的思考模式.pdf》由会员分享,可在线阅读,更多相关《算法学习 1.1从若干实例探讨算法的思考模式.pdf(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、从若干实例探讨算法的思考模式七月算法邹博2015年4月7日4月算法在线班2/总论 算法包罗万象 推理、逻辑、“机智”演绎、归纳、类别 算法是脑力的游戏 合理运用算法,能够获得更高的效率4月算法在线班3/机智:停车的是几号车位?4月算法在线班4/倒过来看一看4月算法在线班5/系统的“数数”围棋棋盘由横纵19*19条线组成,这些线共组成多少个正方形?思路:边长为1的正方形多少个?边长为2的呢?边长为3、4、的呢?以某个点为右下角的正方形共有多少个?然后把所有点的正方形数相加。4月算法在线班6/逻辑推理:完形填空 皇帝不是穷人,在守财奴之中也有穷人,所以,有一些_并不是_。4月算法在线班7/使用离散
2、数学分析该题目 p:这个人是皇帝 q:这个人是穷人 r:这个人是守财奴 皇帝不是穷人:pq 在守财奴之中也有穷人:x(xr xq)4月算法在线班8/分析过程 r:这个人是守财奴 p:这个人是皇帝 有一些 守财奴 并不是 皇帝。4月算法在线班9/系统:字符串表达式的计算 a+b*(c-d)+e 朴素算法 逆波兰表达式 栈的典型应用4月算法在线班10/最大连续子数组 给定一个数组A0,n-1,求A的连续子数组,使得该子数组的和最大。例如 数组:1,-2,3,10,-4,7,2,-5,最大子数组:3,10,-4,7,24月算法在线班11/最大连续子数组的解法 暴力法 分治法 分析法 动态规划法4月算
3、法在线班12/暴力法 直接求解Ai,j的值:0 i n i j n i,i+1,j-1,j的最大长度为n 因此:时间复杂度O(n3)4月算法在线班13/暴力法Code4月算法在线班14/分治法 将数组从中间分开,那么最大子数组要么完全在左半边数组,要么完全在右半边数组,要么跨立在分界点上。完全在左数组、右数组递归解决。跨立在分界点上:实际上是左数组的最大后缀和右数组的最大前缀的和。因此,从分界点向前扫,向后扫即可。4月算法在线班15/分治Code4月算法在线班16/分治法算法复杂度分析算法的递推关系:T(n)=2*T(n/2)+cn,c为常数若,则有:若2kn2k+1,则T(2k)T(n)Al
4、ow,则Alow,low+1.mid-1,mid是递增序列,最小元素位于子数组Amid+1,mid+2,high中。因此,做赋值low=mid+1;若:AmidAlow,则Alow,low+1.mid-1,mid不是递增序列,即:中间元素该子数组中,做赋值high=mid。注:对偶地,若考察Amid与Ahigh的关系,能够得到相似的结论。4月算法在线班23/代码4月算法在线班24/零子数组 求对于长度为N的数组A,求子数组的和接近0的子数组,要求时间复杂度O(NlogN)。4月算法在线班25/算法流程申请同样长度的空间sum0N-1,sumi是A的前i项和。Trick:定义sum-1=0显然有
5、:算法:对sum0N-1排序,然后计算sum相邻元素的差,最小值记为min1。min1:在A中任意取两个集合,各自元素的和求差的最小值因为sum-1=0,sum0N-1的绝对值最小值记为min2。min2:A的前k个元素的和的绝对值的最小值min1和min2的更小者,即为所求。1isumjsumAjikk4月算法在线班26/要说明的两个问题 sum本身的计算和相邻元素差的计算,都是O(N),sum的排序是O(NlogN),因此,总时间复杂度:O(NlogN)强调:除了计算sum相邻元素的差的最小值,别忘了sum自身的最小值。一个对应Aij,一个对应A0j4月算法在线班27/LCS的定义 最长公
6、共子序列,即Longest Common Subsequence,LCS。一个序列S任意删除若干个字符得到新序列T,则T叫做S的子序列;两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。字符串13455与245576的最长公共子序列为455字符串acdfg与adfc的最长公共子序列为adf 注意区别最长公共子串(Longest Common Substring)最长公共字串要求连续4月算法在线班28/LCS的意义 求两个序列中最长的公共子序列算法,广泛的应用在图形相似处理、媒体流的相似比较、计算生物学方面。生物学家常常利用该算法进行基因序列比对,由此推测序列的结构、功
7、能和演化过程。LCS可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能够用来辨别抄袭。另一方面,对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,这种方法判断修改的部分,往往十分准确。简而言之,百度知道、百度百科都用得上。4月算法在线班29/暴力求解:穷举法 假定字符串X,Y的长度分别为m,n;X的一个子序列即下标序列1,2,m的严格递增子序列,因此,X共有2m个不同子序列;同理,Y有2n个不同子序列,从而穷举搜索法需要指数时间O(2m.2n);对X的每一个子序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列,并且在检查过程中选出最
8、长的公共子序列;显然,不可取。4月算法在线班30/LCS的记号 字符串X,长度为m,从1开始数;字符串Y,长度为n,从1开始数;Xi=x1,xi即X序列的前i个字符(1im)(Xi不妨读作“字符串X的i前缀”)Yj=y1,yj即Y序列的前j个字符(1jn)(字符串Y的j前缀);LCS(X,Y)为字符串X和Y的最长公共子序列,即为Z=z1,zk。注:不严格的表述。事实上,X和Y的可能存在多个子串,长度相同并且最大,因此,LCS(X,Y)严格的说,是个字符串集合。即:Z LCS(X,Y).4月算法在线班31/LCS解法的探索:xm=yn 若xm=yn(最后一个字符相同),则:Xm与Yn的最长公共子
9、序列Zk的最后一个字符必定为xm(=yn)。zk=xm=yn LCS(Xm,Yn)=LCS(Xm-1,Yn-1)+xm4月算法在线班32/结尾字符相等,则LCS(Xm,Yn)=LCS(Xm-1,Yn-1)+xm 记LCS(Xm,Yn)=W+xm,则W是Xm-1的子序列;同理,W是Yn-1的子序列;因此,W是Xm-1和Yn-1的公共子序列。反证:若W不是Xm-1和Yn-1的最长公共子序列,不妨记LCS(Xm-1,Yn-1)=W,且|W|W|;那么,将W换成W,得到更长的LCS(Xm,Yn)=Wxm,与题设矛盾。4月算法在线班33/举例:xm=ynBADBCBAYABACDBX7654321对于上
10、面的字符串X和Y:x3=y3=C,则:LCS(BDC,ABC)=LCS(BD,AB)+Cx5=y4=B,则:LCS(BDCAB,ABCB)=LCS(BDCA,ABC)+B4月算法在线班34/LCS解法的探索:xmyn 若xmyn,则:要么LCS(Xm,Yn)=LCS(Xm-1,Yn),要么LCS(Xm,Yn)=LCS(Xm,Yn-1)。证明:令Zk=LCS(Xm,Yn);由于xmyn则zkxm与zkyn至少有一个必然成立,不妨假定zkxm(zkyn的分析与之类似)。因为zkxm,则最长公共子序列Zk是Xm-1和Yn得到的,即:Zk=LCS(Xm-1,Yn)同理,若zkyn,则Zk=LCS(Xm
11、,Yn-1)即,若xmyn,则:LCS(Xm,Yn)=maxLCS(Xm-1,Yn),LCS(Xm,Yn-1)4月算法在线班35/举例:xmynBADBCBAYABACDBX7654321对于字符串X和Y:x2y2,则:LCS(BD,AB)=max LCS(BD,A),LCS(B,AB)x4y5,则:LCS(BDCA,ABCBD)=max LCS(BDCA,ABCB),LCS(BDC,ABCBD)4月算法在线班36/LCS分析总结 显然,属于动态规划问题。nmnmnmnmmnmnmyxYXLCSYXLCSyxxYXLCSYXLCS当当1111,max,4月算法在线班37/算法中的数据结构:长度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法学习 1.1从若干实例探讨算法的思考模式 算法 学习 1.1 若干 实例 探讨 思考 模式
限制150内