国家集训队2005论文集_黄源河
NOI国家集训队论文分类(至2008)(摘抄自C博客)

摘抄自C博客组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008 - 陈瑜希《Pólya计数法的应用》数位问题2009 - 高逸涵《数位计数问题解法研究》2009 - 刘聪《浅谈数位类统计问题》动态统计2004 - 薛矛:《解决动态统计问题的两把利刃》2007 - 余江伟:《如何解决动态统计问题》博弈2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》2007 - 王晓珂:《解析一类组合游戏》2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》2009 - 方展鹏《浅谈如何解决不平等博弈问题》2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》母函数2009 - 毛杰明《母函数的性质及应用》拟阵2007 - 刘雨辰:《对拟阵的初步研究》线性规划2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》置换群2005 - 潘震皓:《置换群快速幂运算研究与探讨》问答交互2003 - 高正宇:《答案只有一个——浅谈问答式交互问题》猜数问题2003 - 张宁:《猜数问题的研究:<聪明的学生>一题的推广》2006 - 龙凡:《一类猜数问题的研究》数据结构数据结构2005 - 何林:《数据关系的简化》2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》2007 - 何森:《浅谈数据的合理组织》2008 - 曹钦翔《数据结构的提炼与压缩》结构联合2001 - 高寒蕊:《从圆桌问题谈数据结构的综合运用》2005 - 黄刚:《数据结构的联合》块状链表2005 - 蒋炎岩:《数据结构的联合——块状链表》2008 - 苏煜《对块状链表的一点研究》动态树2006 - 陈首元:《维护森林连通性——动态树》2007 - 袁昕颢:《动态树及其应用》左偏树2005 - 黄源河:《左偏树的特点及其应用》跳表2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》2009 - 李骥扬《线段跳表——跳表的一个拓展》SBT2007 - 陈启峰:《Size Balance Tree》线段树2004 - 林涛:《线段树的应用》单调队列2006 - 汤泽:《浅析队列在一类单调性问题中的应用》哈希表2005 - 李羽修:《Hash函数的设计优化》2007 - 杨弋:《Hash在信息学竞赛中的一类应用》Splay2004 - 杨思雨:《伸展树的基本操作与应用》图论图论2005 - 任恺:《图论的基本思想及方法》模型建立2004 - 黄源河:《浅谈图论模型的建立与应用》2004 - 肖天:《“分层图思想”及其在信息学竞赛中的应用》网络流2001 - 江鹏:《从一道题目的解法试谈网络流的构造与算法》2002 - 金恺:《浅谈网络流算法的应用》2007 - 胡伯涛:《最小割模型在信息学竞赛中的应用》2007 - 王欣上:《浅谈基于分层思想的网络流算法》2008 - 周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》最短路2006 - 余远铭:《最短路算法及其应用》2008 - 吕子鉷《浅谈最短径路问题中的分层思想》2009 - 姜碧野《SPFA算法的优化及应用》欧拉路2007 - 仇荣琦:《欧拉回路性质与应用探究》差分约束系统2006 - 冯威:《数与图的完美结合——浅析差分约束系统》平面图2003 - 刘才良:《平面图在信息学中的应用》2007 - 古楠:《平面嵌入》2-SAT2003 - 伍昱:《由对称性解2-SAT问题》最小生成树2004 - 吴景岳:《最小生成树算法及其应用》2004 - 汪汀:《最小生成树问题的拓展》二分图2005 - 王俊:《浅析二分图匹配在信息学竞赛中的应用》Voronoi图2006 - 王栋:《浅析平面Voronoi图的构造及应用》偶图2002 - 孙方成:《偶图的算法及应用》树树2002 - 周文超:《树结构在程序设计中的运用》2005 - 栗师:《树的乐园——一些与树有关的题目》路径问题2009 - 漆子超《分治算法在树的路径问题中的应用》最近公共祖先2007 - 郭华阳:《RMQ与LCA问题》划分问题2004 - 贝小辉:《浅析树的划分问题》数论欧几里得算法2009 - 金斌《欧几里得算法的应用》同余方程2003 - 姜尚仆:《模线性方程的应用——用数论方法解决整数问题》搜索搜索2001 - 骆骥:《由“汽车问题”浅谈深度搜索的一个方面——搜索对象与策略的重要性》2002 - 王知昆:《搜索顺序的选择》2005 - 汪汀:《参数搜索的应用》启发式2009 - 周而进《浅谈估价函数在信息学竞赛中的应用》优化2003 - 金恺:《探寻深度优先搜索中的优化技巧——从正方形剖分问题谈起》2003 - 刘一鸣:《一类搜索的优化思想——数据有序化》2006 - 黄晓愉:《深度优先搜索问题的优化技巧》背包问题2009 - 徐持衡《浅谈几类背包题》匹配2004 - 楼天城:《匹配算法在搜索问题中的巧用》概率概率2009 - 梅诗珂《信息学竞赛中概率问题求解初探》数学期望2009 - 汤可因《浅析竞赛中一类数学期望问题的解决方法》字符串字符串2003 - 周源:《浅析“最小表示法”思想在字符串循环同构问题中的应用》多串匹配2004 - 朱泽园:《多串匹配算法及其启示》2006 - 王赟:《Trie图的构建、活用与改进》2009 - 董华星《浅析字母树在信息学竞赛中的应用》后缀数组2004 - 许智磊:《后缀数组》2009 - 罗穗骞《后缀数组——处理字符串的有力工具》字符串匹配2003 - 饶向荣:《病毒的DNA———剖析一道字符匹配问题解析过程》2003 - 林希德:《求最大重复子串》动态规划动态规划2001 - 俞玮:《基本动态规划问题的扩展》2006 - 黄劲松:《贪婪的动态规划》2009 - 徐源盛《对一类动态规划问题的研究》状态压缩2008 - 陈丹琦《基于连通性状态压缩的动态规划问题》状态设计2008 - 刘弈《浅谈信息学中状态的合理设计与应用》树形DP2007 - 陈瑜希:《多角度思考创造性思维——运用树型动态规划解题的思路和方法探析》优化2001 - 毛子青:《动态规划算法的优化技巧》2003 - 项荣璟:《充分利用问题性质——例析动态规划的“个性化”优化》2004 - 朱晨光:《优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化》2007 - 杨哲:《凸完全单调性的加强与应用》计算几何立体几何2003 - 陆可昱:《长方体体积并》2008 - 高亦陶《从立体几何问题看降低编程复杂度》计算几何思想2004 - 金恺:《极限法——解决几何最优化问题的捷径》2008 - 程芃祺《计算几何中的二分思想》2008 - 顾研《浅谈随机化思想在几何问题中的应用》圆2007 - 高逸涵:《与圆有关的离散化》半平面交2002 - 李澎煦:《半平面交的算法及其应用》2006 - 朱泽园:《半平面交的新算法及其实用价值》矩阵矩阵2008 - 俞华程《矩阵乘法在信息学中的应用》高斯消元2002 - 何江舟:《用高斯消元法解线性方程组》数学方法数学思想2002 - 何林:《猜想及其应用》2003 - 邵烜程:《数学思想助你一臂之力》数学归纳法2009 - 张昆玮《数学归纳法与解题之道》多项式2002 - 张家琳:《多项式乘法》数形结合2004 - 周源:《浅谈数形结合思想在信息学竞赛中的应用》黄金分割2005 - 杨思雨:《美,无处不在——浅谈“黄金分割”和信息学的联系》其他算法遗传算法2002 - 张宁:《遗传算法的特点及其应用》2005 - 钱自强:《关于遗传算法应用的分析与研究》信息论2003 - 侯启明:《信息论在信息学竞赛中的简单应用》染色与构造2002 - 杨旻旻:《构造法——解题的最短路径》2003 - 方奇:《染色法和构造法在棋盘上的应用》一类问题区间2008 - 周小博《浅谈信息学竞赛中的区间问题》序2005 - 龙凡:《序的应用》系2006 - 汪晔:《信息学中的参考系与坐标系》物理问题2008 - 方戈《浅析信息学竞赛中一类与物理有关的问题》编码与译码2008 - 周梦宇《码之道—浅谈信息学竞赛中的编码与译码问题》对策问题2002 - 骆骥:《浅析解“对策问题”的两种思路》优化算法优化2002 - 孙林春:《让我们做得更好——从解法谈程序优化》2004 - 胡伟栋:《减少冗余与算法优化》2005 - 杨弋:《从<小H的小屋>的解法谈算法的优化》2006 - 贾由:《由图论算法浅析算法优化》程序优化2006 - 周以苏:《论反汇编在时间常数优化中的应用》2009 - 骆可强《论程序底层优化的一些方法与技巧》语言C++2004 - 韩文弢:《论C++语言在信息学竞赛中的应用》策略策略2004 - 李锐喆:《细节——不可忽视的要素》2005 - 朱泽园:《回到起点——一种突破性思维》2006 - 陈启峰:《“约制、放宽”方法在解题中的应用》2006 - 李天翼:《从特殊情况考虑》2007 - 陈雪:《问题中的变与不变》2008 - 肖汉骏《例谈信息学竞赛分析中的“深”与“广”》倍增2005 - 朱晨光:《浅析倍增思想在信息学竞赛中的应用》二分2002 - 李睿:《二分法与统计问题》2002 - 许智磊:《二分,再二分!——从Mobiles(IOI2001)一题看多重二分》2005 - 杨俊:《二分策略在信息学竞赛中的应用》调整2006 - 唐文斌:《“调整”思想在信息学中的应用》随机化2007 - 刘家骅:《浅谈随机化在信息学竞赛中的应用》非完美算法2005 - 胡伟栋:《浅析非完美算法在信息学竞赛中的应用》2008 - 任一恒《非完美算法初探》提交答案题2003 - 雷环中:《结果提交类问题》守恒思想2004 - 何林:《信息学中守恒法的应用》极限法2003 - 王知昆:《浅谈用极大化思想解决最大子矩形问题》贪心2008 - 高逸涵《部分贪心思想在信息学竞赛中的应用》压缩法2005 - 周源:《压去冗余缩得精华——浅谈信息学竞赛中的“压缩法”》逆向思维2005 - 唐文斌:《正难则反——浅谈逆向思维在解题中的应用》穷举2004 - 鬲融:《浅谈特殊穷举思想的应用》目标转换2002 - 戴德承:《退一步海阔天空——“目标转化思想”的若干应用》2004 - 栗师:《转化目标在解题中的应用》类比2006 - 周戈林:《浅谈类比思想》分割与合并2006 - 俞鑫:《棋盘中的棋盘——浅谈棋盘的分割思想》2007 - 杨沐:《浅析信息学中的“分”与“合”》平衡思想2008 - 郑暾《平衡规划——浅析一类平衡思想的应用》。
冰铜吹炼过程耗氧量及氧利用率仿真计算

0 1 2 . / $( *J 渣 E + , 渣 G # * 烟灰 E . J ) ( , 烟灰 ( 、 , 烟灰 ) + + . " ( #G #* 烟灰 E . !
式中: 为- 中*- 为- 物料的质量; .元素的 , + . H 百分含量。 ( ) (不包括底渣中和( 中的( ) 。 # (元素的平衡 * # ( 和产出 ( 分别 (在吹炼全期的投入 ’ ( ,) 0 1 2 ,) 为: ( * 冰铜 E ( , 冰铜 G * 冰铜 E ’ ( ,$ "F!) E+ !E ( ) ( , 渣 G#* 冷料 E , 冷料 ( 、 , 冷料 ) + + + ( ( " ( #G #* 冷料 E ( !
. 0 1 2 " - 3 " 4 5 2 6 4 7 8 4 9 : 5 2 0 6 9 7 ;7 ;" < " = ? 7 ; < " = 6 " = > / 9 ;0 4 : " 2 6 9 ; 2 0 ; 6 B @A
摘 要: 对稳定生产条件下冰铜吹炼过程耗氧量及全期氧气利用率进行仿真计算。根据 ! , , 仿真计 " # $ %三者的平衡关系, 算出吹炼过程的理论耗氧量和全期氧利用率。转炉吹炼全期氧利用率的平均计算值在& 同国外转炉的氧气利用率一致。 ’ (以上,
某些炉次的全期氧气利用率与平均值相差较大, 主要原因是生产记录的失真及生产情况不稳定。
0 理论耗氧量及全期氧率的仿真计算
$ % ! 吹炼过程的物料分析 铜转炉吹炼分造渣期 (简称 % 期) 和造铜期 (简 称 6 期) 两期完成。铜转炉以冰铜为主要原料, 在 转炉中鼓入富氧空气, 于5 + ! 0 5 + F 下开始造渣 期吹炼, 通过氧化和造渣反应除去铁和硫, 倒渣后得 到白冰铜。白冰铜进入造铜期吹炼, 直至得到粗铜。 其中 %期又分为 % , 中间倒出约 & % 0两期, + ( 的熔 渣并加入适量冰铜。某厂炼铜转炉分为新、 老两套 系统, 老系统为期交换作业制度, 造铜期分为 6 , 6 0 两期, 中间停风一次。新系统为炉交换作业制度, 中
2005年IMO中国国家集训队测验题3

可见平面内不存在 7 点(其中任意三点不共线),使以这 7 点为顶点的所有 三角形都是等腰三角形.
综上知,所求最小正整数 n = 7.
2005 国家集训队选拔考试(三)
反之,当 a = 2l −1(l ≥ 2), m = 1, n = 2 时,由
a2 −1 = (a −1)(a +1) = 2l ⋅ (a −1) ,
知
S(a2 −1) = S(a −1) .
综上知,所求的 (a, m, n ) = ( 2l −1, 1, 2 ) , l ∈ Z+ , l ≥ 2 .
方幂. 引理的证明: 假设 p 为奇质数,由于
b p−1 + b p−2 + + b +1 = (b p−1 −1) + + (b −1) + p .
若 p /| b −1,则
(b p−1 + b p−2 + + b +1, b −1) = ( p,b −1) = 1 ,
从而
S(b p−1 + + b +1) ⊆ S(b −1) ,
nx = my + m − d (可先取正整数 x`, y`,使 my`−nx`= d ⇒ m( y`−1) − nx`= d − m ).
在①中取α = β = x , 则 m
2
⎡ ⎢⎣
xn m
⎤ ⎥⎦
≥
⎡ ⎢⎣
2xn m
⎤ ⎥⎦
,
从而
国家集训队2005论文集 朱泽园

回到起点——一种突破性思维南京市外国语学校朱泽园[关键字] 起点类比分离集合森林[摘要]高层次的信息学竞赛已经不是单纯一个算法、一种数据结构间的较量,而是对思维方法、创新能力的考验。
本文旨在深刻剖析一种突破性思维——回到起点,亦即敢于放弃当前成果,回到初步分析处展开理性思考的可贵品质。
本文第一章提出一个已被经典算法解决的普通题。
第二章对这道题展开讨论,简述了经典的解决方案,而后模拟本文主线描绘的思维方式进行思考,提出一个被遗忘的简单算法,并进行优化和类比,精确计算复杂度后问题被完美解决。
第三章对本思维方式在两个例题中的应用作了对比和升华,辩证地以前进性和曲折性的统一阐述了这类思想的重要性。
§1 问题的提出§1.1 问题描述§1.2 问题的初步分析——离散化§1.3一个朴素的想法§2 问题的解决§2.1 经典算法§2.2 另类算法§2.3通过完整的路径压缩完善算法§2.4秩的建立§2.5 小结§3 总结§1 问题的提出§1.1 问题描述 [USACO 2.1 Shaping Regions改编]N个不同颜色的不透明长方形(1≤N≤3000)被放置在一张长宽分别为A、B 的白纸上。
这些长方形被放置时,保证了它们的边与白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。
坐标系统的原点(0,0),设在这张白纸的左下角,而坐标轴则平行于纸边缘。
输入:第1行:A , B 和N, 由空格分开。
第2~N+1行:按照从下往上的顺序,每行输入的是一个长方形的放置。
为五个数llx, lly, urx, ury, color这是长方形的左下角坐标,右上角坐标和颜色。
其中color为整数。
0<=llx,urx<=A,0<=lly,ury<=B。
左偏树的特点及其应用

左偏树的特点及其应用广东省中山市第一中学黄源河【摘要】本文较详细地介绍了左偏树的特点以及它的各种操作。
第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。
第二部分主要介绍了左偏树的定义和性质。
第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。
第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。
第五部分对各种可并堆作了一番比较。
最后总结出左偏树的特点以及应用前景。
【关键字】左偏树可并堆优先队列【目录】一、引言 (2)二、左偏树的定义和性质 (2)2.1 优先队列,可并堆 (2)2.1.1 优先队列的定义 (2)2.1.2 可并堆的定义 (2)2.2 左偏树的定义 (3)2.3 左偏树的性质 (4)三、左偏树的操作 (5)3.1 左偏树的合并 (5)3.2 插入新节点 (7)3.3 删除最小节点 (8)3.4 左偏树的构建 (8)3.5 删除任意已知节点 (9)3.6 小结 (12)四、左偏树的应用 (13)4.1 例——数字序列(Baltic 2004) (13)五、左偏树与各种可并堆的比较 (15)5.1 左偏树的变种——斜堆 (15)5.2 左偏树与二叉堆的比较 (16)5.3 左偏树与其他可并堆的比较 (16)六、总结 (18)【正文】一、引言优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。
二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。
本文介绍的左偏树,可以很好地解决这类问题。
二、左偏树的定义和性质在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。
2.1优先队列,可并堆2.1.1优先队列的定义优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。
基于能量守恒的HTPB推进剂非线性本构关系

剂 的损伤 , 提出 了损 伤本构 关系 。V r a t s a n o s 与F a r r i s
1 引 言
复合 固体 推进 剂不 仅是 固体 火箭 发动 机 的能量 物 质, 也 是 其重要 的结构材 料 , 在成 型 、 贮 存与 使 用 中 , 往 往存 在各 种机 械 与温 度 载 荷 , 引 起 各种 不 同形 式 的 微
本 构关 系 。国 内 , 彭 威 … 针 对 复 合 固体 推 进 剂 , 考 虑
粒 子增 强作用 与界 面 脱 湿损 伤 , 建 立 了含 损伤 变 量 的
面脱 湿对 宏观 本构 关 系 的 影 响 , 并 正 确 预 测 复 合 固 体
推进 剂 的力学 性 能 。
粘 弹性宏 观本 构关 系 , 并 与拉 伸 曲线对 比 , 结果 吻合 较 好 。李丹 与 胡 更 开 针 对 高 粒 子 体 积分 数 聚 合 物 材 料, 基于 L a p l a c e变换 和双夹 杂相 互作 用 的 弹性 模 型 ,
基 于能 量 守 恒 的 HT P B推进 剂 非线 性 本构 关 系
3 2 5
文章编号 : 1 0 0 6 — 9 9 4 1 ( 2 0 1 3 ) 0 3 — 0 3 2 5 — 0 5
基 于 能 量 守 恒 的 HT P B推 进 剂 非 线 性 本 构 关 系
龚建良, 刘佩进, 李 强
固体 推进 剂失 效 。在 实 验 中 , 单 独地 分 析 界 面 脱 湿 对
能 炸药 , 使用 数字 图像相 关 ( DI C) 技术 , 获取 了基体 与 粒 子 的界 面 粘 性 定 律 , 并 确 定 了模 型参 数 , 并在 R V E ( R e p r e s e n t a t i v e V o l u me E l e me n t ) 上, 使 用 平 均 化 与
国家集训队2004论文集 黄源河

浅谈图论模型的建立与应用广东省中山市第一中学黄源河【关键字】图论模型、建立、转化【摘要】在近几年的信息学竞赛中,图论题目层出不穷。
图论作为一个新生的数学分支,相比其他数学分支来说,具有许多自有的特性。
利用图论解题,通常具有高效、简洁的便利。
有了这门工具,并不意味就能很好地解决问题,还在于我们能否熟练地识别与建立一系列的图论模型。
本文通过一些实例,简单地介绍一下图论建模的方法。
【正文】引言应用数学知识解题时,首先要通过对实际问题的分析,研究组建用以描述这个问题的数学模型。
使用数学的理论和方法对模型进行分析从而得到结果,再返回去解决现实的实际问题。
图论模型是一类特殊的数学模型,建立图论模型,就是要从问题的原型中,抽取对我们有用的信息和要素,把问题抽象为点、边、权的关系。
经过图论建模之后,杂乱无章的信息变得有规可寻,要素的内在联系体现在了点、边、权的关系。
有不少经典的图论模型可以直接用特定的算法解决,一些复杂的问题,只要能认清问题的本质,把握问题的关键,建立合适的图论模型,往往能转化为我们熟悉的经典问题。
本文要写的,正是我在图论建模方面的一点心得与认识。
例题分析〖例题1〗Place the Robots (ZOJ)[问题大意]有一个N*M(N,M<=50)的棋盘,棋盘的每一格是三种类型之一:空地、草地、墙。
机器人只能放在空地上。
在同一行或同一列的两个机器人,若它们之间没有墙,则它们可以互相攻击。
问给定的棋盘,最多可以放置多少个机器人,使它们不能互相攻击。
[分析]在问题的原型中,草地,墙这些信息不是我们所关心的,我们关心的只是空地和空地之间的联系。
因此,我们很自然想到了下面这种简单的模型:以空地为顶点,有冲突的空地间连边,我们可以得到下面的这个图:那么,问题转化为求图的最大独立集问题。
众所周知,这是NP-完全问题。
看来,建立这样的模型,没有给问题的求解带来任何便利,我们必须建立一个行之有效的新模型。
2005年教师科研成果统计

数 学 组
王小海 王小海 王小海 王小海 王 迪 祝水仙
1 型函数的值域谈起 f ( x)
数列与函数的融合 《高中英语语法应用学习指导》一书
外
戴亚华Leabharlann 物 理王保全 周异平 汪国新 顾建辛 顾建辛 顾建辛 顾建辛 顾建辛 顾建辛 顾建辛 顾建辛 王法高 魏建方 魏建方
《高中英语形成性评价与自主学习能 力培养研究》开题报告 伟大的创举伟大的人——纪念爱因斯 坦发表相对论 100 周年逝世 50 周年 游戏体验可以育德 从宏观上把握理科综合复习的方向性 高考化学综合复习方法点拨(上) 高考化学综合复习方法点拨(下) 理性审视“3+X”高考模式的改革 平实中见能力,规范中含创新 走进科学研究的神圣殿堂---高中化学 研究性学习讲座(上) 走进科学研究的神圣殿堂---高中化学 研究性学习讲座(下) 中学化学教学中教学问题设计的艺术 谈化学课堂合作学习实施策略 中考化学条件开放类试题解析 化学考前 30 天备考体会 何时该考虑盐的水解 对新课标下学生实验探究教学的思考 与实践 探索新课标下的教学模式 化学教学中“问”的技艺 课外实验与课堂教学的互动研究 “先行组织者”在高中化学教学中的运 用策略 构建数学思维 解决化学问题 “先行组织者”在高中化学教学中的运 用策略 浅议水在化学实验中的作用 中考化学条件开放类试题解析 《金属钠的性质和应用教案》 高综合化学学生实验与课题研究 新课堂教学指导丛书《新课堂·初中生 物》(主编:施忆) 《高三教学与高考试题脱节的问题必 须着手解决》 《评瑕瑜互见的 2005 年高考文综试卷》 《一张瑕瑜互见的试卷》 《中国近代现代史阶段特征和高考命 题取向》 《世界近现代史的阶段性特征和高考 命题取向》 《高考政治复习策略》 《新课标理念下的地理课堂提问策略》
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
左偏树的特点及其应用广东省中山市第一中学 黄源河【摘要】本文较详细地介绍了左偏树的特点以及它的各种操作。
第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。
第二部分主要介绍了左偏树的定义和性质。
第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。
第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。
第五部分对各种可并堆作了一番比较。
最后总结出左偏树的特点以及应用前景。
【关键字】左偏树 可并堆 优先队列【目录】一、引言 (2)二、左偏树的定义和性质 (2)2.1 优先队列,可并堆 (2)2.1.1 优先队列的定义 (2)2.1.2 可并堆的定义 (2)2.2 左偏树的定义 (3)2.3 左偏树的性质 (4)三、左偏树的操作 (5)3.1 左偏树的合并 (5)3.2 插入新节点 (7)3.3 删除最小节点 (8)3.4 左偏树的构建 (8)3.5 删除任意已知节点 (9)3.6 小结 (12)四、左偏树的应用 (13)4.1 例——数字序列(Baltic 2004) (13)五、左偏树与各种可并堆的比较 (15)5.1 左偏树的变种——斜堆 (15)5.2 左偏树与二叉堆的比较 (16)5.3 左偏树与其他可并堆的比较 (16)六、总结 (18)【正文】一、引言优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。
二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。
本文介绍的左偏树,可以很好地解决这类问题。
二、左偏树的定义和性质在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。
2.1 优先队列,可并堆2.1.1优先队列的定义优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。
优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。
为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。
优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimum) 和删除最小节点(Delete-Min)。
2.1.2可并堆的定义可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作:H ← Merge(H1,H2)Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。
前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。
可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。
左偏树(Leftist Tree)、二项堆(Binomial Heap) 和Fibonacci堆(Fibonacci Heap) 都是十分优秀的可并堆。
本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。
左偏树(Leftist Tree)是一种可并堆的实现。
左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针( left, right )外,还有两个属性:键值和距离(dist)。
键值上面已经说过,是用于比较节点的大小。
距离则是如下定义的:节点i称为外节点(external node),当且仅当节点i的左子树或右子树为空( left(i) = NULL或right(i) = NULL );节点i的距离(dist(i))是节点i到它的后代中,最近的外节点所经过的边数。
特别的,如果节点i本身是外节点,则它的距离为0;而空节点的距离规定为-1 (dist(NULL) = -1)。
在本文中,有时也提到一棵左偏树的距离,这指的是该树根节点的距离。
左偏树满足下面两条基本性质:[性质1] 节点的键值小于或等于它的左右子节点的键值。
即key(i)≤key(parent(i)) 这条性质又叫堆性质。
符合该性质的树是堆有序的(Heap-Ordered)。
有了性质1,我们可以知道左偏树的根节点是整棵树的最小节点,于是我们可以在O(1) 的时间内完成取最小节点操作。
[性质2] 节点的左子节点的距离不小于右子节点的距离。
即dist(left(i))≥dist(right(i)) 这条性质称为左偏性质。
性质2是为了使我们可以以更小的代价在优先队列的其它两个基本操作(插入节点、删除最小节点)进行后维持堆性质。
在后面我们就会看到它的作用。
这两条性质是对每一个节点而言的,因此可以简单地从中得出,左偏树的左右子树都是左偏树。
由这两条性质,我们可以得出左偏树的定义:左偏树是具有左偏性质的堆有序二叉树。
下图是一棵左偏树:Node:keydistL R在前面一节中,本文已经介绍了左偏树的两个基本性质,下面本文将介绍左偏树的另外两个性质。
我们知道,一个节点必须经由它的子节点才能到达外节点。
由于性质2,一个节点的距离实际上就是这个节点一直沿它的右边到达一个外节点所经过的边数,也就是说,我们有[性质3] 节点的距离等于它的右子节点的距离加1。
即dist( i ) = dist( right( i ) ) + 1外节点的距离为0,由于性质2,它的右子节点必为空节点。
为了满足性质3,故前面规定空节点的距离为-1。
我们的印象中,平衡树是具有非常小的深度的,这也意味着到达任何一个节点所经过的边数很少。
左偏树并不是为了快速访问所有的节点而设计的,它的目的是快速访问最小节点以及在对树修改后快速的恢复堆性质。
从图中我们可以看到它并不平衡,由于性质2的缘故,它的结构偏向左侧,不过距离的概念和树的深度并不同,左偏树并不意味着左子树的节点数或是深度一定大于右子树。
下面我们来讨论左偏树的距离和节点数的关系。
[引理1] 若左偏树的距离为一定值,则节点数最少的左偏树是完全二叉树。
证明:由性质2可知,当且仅当对于一棵左偏树中的每个节点i,都有dist(left(i)) = dist(right(i)) 时,该左偏树的节点数最少。
显然具有这样性质的二叉树是完全二叉树。
[定理1] 若一棵左偏树的距离为k,则这棵左偏树至少有2k+1-1个节点。
证明:由引理1可知,当这样的左偏树节点数最少的时候,是一棵完全二叉树。
距离为k的完全二叉树高度也为k,节点数为2k+1-1,所以距离为k的左偏树至少有2k+1-1个节点。
作为定理1的推论,我们有:[性质4] 一棵N个节点的左偏树距离最多为⎣log(N+1)⎦ -1。
证明:设一棵N个节点的左偏树距离为k,由定理1可知,N ≥ 2k+1-1,因此k ≤⎣log(N+1)⎦ -1。
有了上面的4个性质,我们可以开始讨论左偏树的操作了。
三、左偏树的操作本章将讨论左偏树的各种操作,包括插入新节点、删除最小节点、合并左偏树、构建左偏树和删除任意节点。
由于各种操作都离不开合并操作,因此我们先讨论合并操作。
3.1 左偏树的合并C ← Merge(A,B)Merge( ) 把A,B两棵左偏树合并,返回一棵新的左偏树C,包含A和B中的所有元素。
在本文中,一棵左偏树用它的根节点的指针表示。
在合并操作中,最简单的情况是其中一棵树为空(也就是,该树根节点指针为NULL)。
这时我们只须要返回另一棵树。
若A和B都非空,我们假设A的根节点小于等于B的根节点(否则交换A,B),把A的根节点作为新树C的根节点,剩下的事就是合并A的右子树right(A) 和B了。
right(A) ← Merge(right(A), B)合并了right(A) 和B之后,right(A) 的距离可能会变大,当right(A) 的距离大于left(A) 的距离时,左偏树的性质2会被破坏。
在这种情况下,我们只须要交换left(A) 和right(A)。
若dist(left(A)) > dist(right(A)),交换left(A) 和right(A)最后,由于right(A) 的距离可能发生改变,我们必须更新A的距离:dist(A) ← dist(right(A)) + 1不难验证,经这样合并后的树C符合性质1和性质2,因此是一棵左偏树。
至此左偏树的合并就完成了。
下图是一个合并过程的示例:合并流程我们可以用下面的代码描述左偏树的合并过程:下面我们来分析合并操作的时间复杂度。
从上面的过程可以看出,每一次递归合并的开始,都需要分解其中一棵树,总是把分解出的右子树参加下一步的合并。
根据性质3,一棵树的距离决定于其右子树的距离,而右子树的距离在每次分解中递减,因此每棵树A或B被分解的次数分别不会超过它们各自的距离。
根据性质4,分解的次数不会超过⎣log(N1+1)⎦ + ⎣log(N2+1)⎦ -2,其中N1和N2分别为左偏树A和B的节点个数。
因此合并操作最坏情况下的时间复杂度为O( ⎣log(N1+1)⎦ + ⎣log(N2+1)⎦ -2) = O(log N1 + log N2)。
3.2插入新节点单节点的树一定是左偏树,因此向左偏树插入一个节点可以看作是对两棵左偏树的合并。
下面是插入新节点的代码:由于合并的其中一棵树只有一个节点,因此插入新节点操作的时间复杂度是O(log n)。
3.3删除最小节点由性质1,我们知道,左偏树的根节点是最小节点。
在删除根节点后,剩下的两棵子树都是左偏树,需要把他们合并。
删除最小节点操作的代码也非常简单:由于删除最小节点后只需进行一次合并,因此删除最小节点的时间复杂度也为O(log n)。
3.4 左偏树的构建将n个节点构建成一棵左偏树,这也是一个常用的操作。
算法一暴力算法——逐个节点插入,时间复杂度为O(n log n)。
算法二仿照二叉堆的构建算法,我们可以得到下面这种算法:¾将n个节点(每个节点作为一棵左偏树)放入先进先出队列。
¾不断地从队首取出两棵左偏树,将它们合并之后加入队尾。
¾当队列中只剩下一棵左偏树时,算法结束。
构建流程下面分析算法二的时间复杂度。
假设n=2k ,则:前2n 次和并的是两棵只有1个节点的左偏树。
接下来的4n 次合并的是两棵有2个节点的左偏树。
接下来的8n 次合并的是两棵有4个节点的左偏树。
……接下来的i n 2次合并的是两棵有2i-1个节点的左偏树。
合并两棵2i 个节点的左偏树时间复杂度为O(i ),因此算法二的总时间复杂度为:∑==+−==…+++k i k i n O k n O i n O O n O n O n 1)())222(*()2*()3(*8)2(*4)1(*2。
3.5 删除任意已知节点接下来是关于删除任意已知节点的操作。