July_algorithm 4.3树.pdf
《July_algorithm 4.3树.pdf》由会员分享,可在线阅读,更多相关《July_algorithm 4.3树.pdf(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数组、树七月算法邹博2015年10月25日10月算法在线班2/84Cantor数组 已知数组A0N-1乱序着前N个正整数,现统计后缀数组Ai+1N-1中小于元素Ai的数目,并存放在数组Ci中。如给定数组A=4,6,2,5,3,1,得到数组C=3,4,1,2,1,0。问:给定数组C=3,4,1,2,1,0,如何恢复数组A?我们称A为原数组,C为Cantor数组。10月算法在线班3/84Code 原数组 Cantor数组10月算法在线班4/84问题分析 Cantor数组:3,4,1,2,1,0原数组:4,6,2,5,3,1 给定顺序数组B=1,2,3N-1,N,从0开始数 考察Cantor数组的首
2、位C0:小于A0的个数为C0,则A0为BC0 在序列数组B中删除BC0,仍然满足以上性质。10月算法在线班5/84Code10月算法在线班6/84进一步思考 以上代码空间复杂度为O(N),时间复杂度为O(N2),若允许更改数组C,可否降低空间复杂度?Cantor数组:3,4,1,2,1,0原数组:4,6,2,5,3,1 考察Cantor数组中第一个出现0的位置:它表示位于该位置右侧的所有元素都大于该元素,则该元素必然是最小的。每次找到第一个0后,将0左侧的Cantor值都减一,重复以上操作。空间复杂度为O(1)。10月算法在线班7/84Code10月算法在线班8/84总结与思考 Cantor数
3、组:3,4,1,2,1,0原数组:4,6,2,5,3,1 将Cantor数组的每个元素都指定各自的权重:ci的权重为(n-1-i)的阶乘,则Cantor数组与一个整数一一对应,该数称为原数组的Cantor展开数,从Cantor展开数求Cantor数组的过程称为Cantor展开。Cantor数组中元素的和,表示原数组中逆序对的个数,问:给定数组A,如果计算A的逆序对个数?思考时间复杂度为O(NlogN)的算法。10月算法在线班9/84子集和数问题 N-Sum 已知数组A0N-1,给定某数值sum,找出数组中的若干个数,使得这些数的和为sum。布尔向量x0N-1 xi=0表示不取Ai,xi=1表示
4、取Ai 假定数组中的元素都大于0:Ai0 这是个NP问题!10月算法在线班10/84分析方法 直接递归法(枚举)分支限界 存在负数的处理办法10月算法在线班11/84直接递归法10月算法在线班12/84考虑对于分支如何限界 前提:数组A0N-1的元素都大于0 考察向量x0N-1,假定已经确定了前i个值,现在要判定第i+1个值xi为0还是1。假定由x0i-1确定的A0i-1的和为has;Ai,i+1,N-1的和为residue(简记为r);has+aisum并且has+rsum:xi可以为1;has+(r-ai)=sum:xi可以为0;注意,这里是“可以”可以能够:可能。10月算法在线班13/8
5、4分支限界法10月算法在线班14/84数理逻辑的重要应用:分支限界的条件 分支限界的条件是充分条件吗?在新题目中,如何发现分支限界的条件。学会该方法,比此问题本身更重要10月算法在线班15/84考虑负数的情况 枚举法肯定能得到正确的解 如何对负数进行分支限界?可对整个数组A0N-1正负排序,使得负数都在前面,正数都在后面,使用剩余正数的和作为分支限界的约束:如果Ai为负数:如果全部正数都算上还不够,就不能选Ai;如果递归进入了正数范围,按照数组是全正数的情况正常处理;10月算法在线班16/84带负数的分支限界10月算法在线班17/84求字符串的最长回文子串 回文子串的定义:给定字符串str,若
6、s同时满足以下条件:s是str的子串 s是回文串 则,s是str的回文子串。该算法的要求,是求str中最长的那个回文子串。10月算法在线班18/84枚举中心位置 给定字符串str,则:以stri为中心的回文串最长是多少(奇数)?stri+j=stri-j 以stri和stri+1为中心的回文串最长是多少(偶数)?stri-j=stri+1+j 判断时注意i+j,i-j,i+1+j不要越界。时间复杂度为O(N2)。10月算法在线班19/84Code10月算法在线班20/84算法解析 step1预处理 因为回文串有奇数和偶数的不同。判断一个串是否是回文串,往往要分开编写,造成代码的拖沓。一个简单的
7、事实:长度为n的字符串,共有n-1个“邻接”,加上首字符的前面,和末字符的后面,共n+1的“空”(gap)。因此,字符串本身和gap一起,共有2n+1个,必定是奇数;abbc#a#b#b#c#aba#a#b#a#因此,将待计算母串扩展成gap串,计算回文子串的过程中,只考虑奇数匹配即可。10月算法在线班21/84数组int Psize 字符串12212321 S=$#1#2#2#1#2#3#2#1#;trick:为处理统一,最前面加一位未出现的字符,如$用一个数组Pi来记录以字符Si为中心的最长回文子串向左/右扩张的长度(包括Si),比如S和P的对应关系:S#1#2#2#1#2#3#2#1#P
8、 1 2 1 2 5 2 1 4 1 2 1 6 1 2 1 2 1Pi-1正好是原字符串中回文串的总长度 若Pi为偶数,考察x=Pi/2、2*x-1 思考:若Pi为奇数呢?答:不考虑!(为何?)10月算法在线班22/84分析算法核心我们的任务:假定已经得到了前i个值,考察i+1如何计算即:在P0.i-1已知的前提下,计算Pi的值。换句话说,算法的核心,是在P0.i-1已知的前提下,能否给Pi的计算提供一点有用的信息呢?1、通过简单的遍历,得到i个三元组k,Pk,k+Pk,0ki-1trick:以k为中心的字符形成的最大回文子串的最右位置是k+Pk-12、以k+Pk为关键字,挑选出这i个三元组
9、中,k+Pk最大的那个三元组,不妨记做(id,Pid,Pid+id)。进一步,为了简化,记mx=Pid+id,因此,得到三元组为(id,Pid,mx),这个三元组的含义非常明显:所有i个三元组中,向右到达最远的位置,就是mx;3、在计算Pi的时候,考察i是否落在了区间0,mx)中;若i在mx的右侧,说明0,mx)没有能够控制住i,P0.i-1的已知,无法给Pi的计算带来有价值信息;若i在mx的左侧,说明0,mx)控制(也有可能部分控制)了i,现在以图示来详细考察这种情况。10月算法在线班23/84Manacher递推关系 记i关于id的对称点为j(=2*id-i),若此时满足条件mx-iPj:
10、记my为mx关于id的对称点(my=2*id-mx);由于以Sid为中心的最大回文子串为Smy+1idmx-1,即:Smy+1,id与Sid,mx-1对称,而i和j关于id对称,因此Pi=Pj(Pj是已知的)。10月算法在线班24/84Manacher递推关系 记i关于id的对称点为j(=2*id-i),若此时满足条件mx-iPj:记my为mx关于id的对称点(my=2*id-mx);由于以Sid为中心的最大回文子串为Smy+1idmx-1,即:Smy+1,id与Sid,mx-1对称,而i和j关于id对称,因此Pi至少等于mx-i(图中绿色框部分)。10月算法在线班25/84Manacher
11、Code10月算法在线班26/84原始算法的个人改进意见 Pj mx i:Pi=mx i Pj 2;第2个元素a2到了原第4个元素a4的位置,即2-4;第3个元素a3到了原第6个元素b2的位置,即3-6;第4个元素a4到了原第8个元素b4的位置,即4-8;前n个元素中,第i个元素的最终位置为(2*i)。后n个元素,可以看出:第5个元素b1到了原第1个元素a1的位置,即5-1;第6个元素b2到了原第3个元素a3的位置,即6-3;第7个元素b3到了原第5个元素b1的位置,即7-5;第8个元素b4到了原第7个元素b3的位置,即8-7;后n个元素,第i个元素的最终位置为:(2*(i-n)-1=2*i-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- July_algorithm 4.3树 4.3
限制150内