ImageVerifierCode 换一换
格式:PPT , 页数:18 ,大小:117KB ,
资源ID:7019794      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7019794.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法合集之《从《parity》的解法谈程序优化》.ppt)为本站会员(hskm5268)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

算法合集之《从《parity》的解法谈程序优化》.ppt

1、让我们做得更好,从parity的解法 谈程序优化,福州第三中学高三(3) 孙林春,Parity题意描述,一个序列全部由0和1构成。你将知道其中某些连续的区间段中(例如,从第三位到第五位)含有的1的个数是奇数还是偶数,这些信息按照给出顺序编号。然而,这些信息有可能是自相矛盾的。你的任务是编程求出一个最大编号,使得存在一个序列,满足此编号及此编号之前的所有信息。,样例输入: 10序列的长度L,1=L=1 000 000 000 5 信息总数N,1=N=5000 1 2 even 表示从第一位到第二位中含有偶数个1 3 4 odd 表示从第三位到第四位中含有奇数个1 5 6 even 1 6 eve

2、n 7 10 odd,样例输出: 3 即可以找到一个序列,使之满足前三条信息,但找不到一个序列,使之满足前四条信息,算法框架,是,是,否,否,原始的考虑算法一,预备:两个区间之间的关系,具体做法是:将当前的区间与已知区间逐个进行比较:如果存在某个已知区间与之重合,则直接判断是否出现矛盾;否则,如果有左端点或右端点与其相同的区间,则对区间进行删截,同时修改区间信息,并将得到的新区间重新与已知区间比较,直至与所有已知区间的左右端点都不相同为止;最后将剩下的区间插入已知区间的队列中。,将当前区间的信息分别与每个已知的区间的信息进行比较,判断是否出现矛盾。,两个区间之间的关系,1 相离区间1 区间2,

3、2 重合 区间1 区间2,两个区间之间的关系,深入分析算法二,改进点:保留部分重复的区间及信息,而把注意力集中到其中一些能够直接导出矛盾信息的区间上来。做法:当读入一个新的区间并进行判断时:若已知区间队列中有与其具有共同的左端点的区间,我们只需留下它们之中右端点小的一个,较长区间长出的部分则可以看成是一个新的区间,并重新与其他已知区间进行比较;若没有一个已知区间与当前区间有相同的左端点,则将当前区间作为一个新的左端点的代表区间插入队列中。,局部优化算法三,改进:将原有的端点值离散化后对端点重新编号。我们将所有出现过的端点值放入另一个数组中,并对该数组进行快速排序,然后把用二分法在该数组中查找一

4、个端点值所得到下标作为该端点的新编号。,最简单的办法:开一个数组,将左端点的值作为数组的下标,数组中的值表示该左端点的代表区间的右端点的值,若这样的区间不存在,则值记为0。,离散化端点值,提高查找效率,挖掘本质算法四,区间奇偶性描述法:以某个区间段中所含的1的个数的奇偶性来描述01序列,Pi,j=,前缀奇偶性描述法:以前i位中所含1的个数的奇偶性来描述01序列,Parityi=,两种描述法的对应关系,若pi,j=true,则parityi-1 xor parityj=true; 若pi,j=false,则parityi-1 xor parityj=false;,parity数组的所有下标构成了

5、集合A1,2,L。这个集合根据元素i所对应的parityi的值是True还是False被划分成了两个等价类A1和A2,所有parityi=True的i归入A1中,所有parityiFalse的i则归入A2中。根据对应关系,pi,j的值是True还是False决定了parityi-1的值与parityj的值是否相同;实际上也就决定了i1和j是否属于同一个等价类。这样,原来对每个区间i,j进行约束的条件就转化成了元素i-1,j是否属于同一个等价类的判断条件。,定义集合samei表示已知与i在同一个等价类中的元素集合集合oppi表示已知与i不在同一个等价类中的元素集合 根据已知条件,若有:parit

6、yjparityi,则jsamei;parityjparityi,则joppi;初始时,samei=i,oppi=。,具体做法是,if 与已知条件不矛盾 thenif pi,j=true then begin合并(samei,samej); 合并(oppi,oppj) ;end elsebegin合并(samei,oppj); 合并(samej,oppi);endelse 中止判断;,依次处理每条区间信息:,具体实现时,我们可以应用并查集来完成所需的操作。理论上已经证明,如果利用按秩合并与路径压缩等技巧对程序进行充分优化,并查集这种数据结构的时间复杂度是O(N*(N)的。其中,(N)是单变量阿

7、克曼函数的逆,它是一个增长速度比logN慢的多但又不是常数的函数。同时,我们已经将算法主体部分的时间复杂度降为O(N*(N)的,查找部分再用O(logN)的二分查找就显得不合适了,因此我们考虑用更加高效的哈希表来实现查找。哈希表的查找时间是O(1)的,因此,算法中的查找时间是O(N)的。,综合两部分,整个程序的时间复杂度为(N*(N)。,运行时间比较,总 结,通过解决这道题,我们看到了充分优化算法的重要作用,并从中总结出优化算法的一些一般规律:1 从问题出发,深入挖掘题目本质;2 针对当前算法的不足加以改进。但归根到底,这些优化都是建立在对问题本身及数据结构深刻理解的基础上的。只有充分认识问题,理解问题,并熟练掌握各种数据结构,才能针对问题设计出高效而实用的算法并加以实现。,让我们做得更好!谢谢!,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报