国家集训队2004论文集 肖天

合集下载

Acm竞赛常用算法与数据结构

Acm竞赛常用算法与数据结构

• 每次用堆取出x进行计算,O(mnlogmn)。
28
哈希表(Hash)
• 理论上查找速度最快的数据结构之一 • 缺点: 需要大量的内存 需要构造Key
29
Hash表的实现
• 数组 • 冲突解决法 • 开散列法 • 闭散列法 C++ sgi stl 实现
30
Hash Key的选取
• 数值: • 方法一:直接取余数(一般选取质数M最为除 数) • 方法二:平方取中法,即计算关键值的平方, 2 r 的表 再取中间r位形成一个大小为
7
常见题型
•Dynamic Programming(动 态规划) •Greedy(贪心) •Complete Search(穷举) •Flood Fill (种子填充)
8
常见题型
• Shortest Path (最短路径) • Recursive Search Techniques (回溯) • Minimum Spanning Tree (最小 生成树) • Knapsack(背包)
22
Parity(ceoi99)
• 从整个01序列肯定是无法入手的,因为它 的长度高达109。 • 从范围比较小的n入手。也就是说我们需要 对信息进行一些特殊的处理。 • a b even/odd,那么将元素b指向a-1, 边的权值是even/odd。 • 下面我们由样例来说明一下这个处理方法。
23
11
12
枚举法
• 又叫穷举法,它利用了计算机计算 速度快且准确的特点,是最为朴素 和有效的一种算法。
• 不是办法的办法
• 但有时却是最好的办法
13
Pizza Anyone? (ZOJ 1219)
• 题目大意: 你需要为你和你的朋友们订一个皮萨。 每个朋友都会告诉你他们想和不想放进皮萨 里的东西。 你是否能订一个皮萨,让他满足每个人 至少一个条件。 假设一共有16种东西可以放进皮萨。

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

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 - 郑暾《平衡规划——浅析一类平衡思想的应用》。

基于能量守恒的HTPB推进剂非线性本构关系

基于能量守恒的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 ) 上, 使 用 平 均 化 与

【综合】Acm竞赛简介

【综合】Acm竞赛简介

Parity(ceoi99)(肖天)
• 建立sum数组,sum[i]表示从1到i之和是奇(true)还是偶 (false),sum[0]=false。这样题目中给的任意问题(a,b) 的答案都可以用sum[b] xor sum[a-1]表示。 • 开始我们并不知道sum[1..n]的值,不妨设为false,这时任意 sum[a],sum[b]都是独立的。对于每对问答(a,b,c),都可以 知道sum[b] xor sum[a-1]=c,由此把sum[b]和sum[a-1] 联系起来。这步操作可以用并查集完成,对于问答(a,b,c)如 果sum[a-1],sum[b]不属于一个集合就把它们并起来,否则 如果sum[a-1] xor sum[b]不等于c则说明出现矛盾,输出总 句数,退出。 • 对于不出现矛盾的sum数组,对于每个集合分为两个部分,我 们指定其中一个部分为true,另一个部分为false,则可以确定 sum数组,利用sum[i] xor sum[i-1]可以求出第i位的数字, 由于不同集合之间没有问答出现,所以此数列是一可行解,证 明算法正确。
• 但有时却是最好的办法
22
Pizza Anyone? (ZOJ 1219)
• 题目大意: 你需要为你和你的朋友们订一个皮萨。 每个朋友都会告诉你他们想和不想放进皮萨 里的东西。 你是否能订一个皮萨,让他满足每个人 至少一个条件。 假设一共有16种东西可以放进皮萨。
23
2 65536
16
是个对计算机很 小的数
3
ACM
ACM (Association for Computing Machinery) 成立于计算机诞生次年,是目前计算机学界中历史最 悠久、最具权威性的组织,是推进信息技术专业人员 和学生提高技巧的主要力量。ACM通过提供前沿技 术信息和从理论到实践的转化,为其全球7.5万名成 员服务,并已经成为信息科技领域的一个基本信息来 源。

国家集训队2009论文集后缀数组——处理字符

国家集训队2009论文集后缀数组——处理字符

后缀数组 罗穗骞
例 10:长度不小于 k 的公共子串的个数(pku3415) ……………23 2.4 多个字符串的相关问题 …………………………………………………23
例 11:不小于 k 个字符串中的最长子串(pku3294) ……………………24 例 12:每个字符串至少出现两次且不重叠的最长子串(spoj220)……24 例 13:出现或反转后出现在每个字符串中的最长子串(pku3294)……24 三、结束语 …………………………………………………………………………25 参考文献 ……………………………………………………………………………25 致谢 …………………………………………………………………………………25
目录
后缀数组 罗穗骞
摘要 …………………………………………………………………………………4 关键字 ………………………………………………………………………………4 正文 …………………………………………………………………………………4 一、后缀数组的实现 …………………………………………………………………4
符 串 r 的 从 第 i 个 字 符 开 始 的 后 缀 表 示 为 Suffix(i) , 也 就 是 Suffix(i)=r[i..len(r)]。
大小比较:关于字符串的大小比较,是指通常所说的“字典顺序”比较,也 就是对于两个字符串 u、v,令 i 从 1 开始顺次比较 u[i]和 v[i],如果 u[i]=v[i]则令 i 加 1,否则若 u[i]<v[i]则认为 u<v,u[i]>v[i]则认为 u>v (也就是 v<u),比较结束。如果 i>len(u)或者 i>len(v)仍比较不出结果,那 么 若 len(u)<len(v) 则 认 为 u<v , 若 len(u)=len(v) 则 认 为 u=v , 若 len(u)>len(v)则 u>v。

国家集训队2007论文集5.杨沐《浅析信息学中

国家集训队2007论文集5.杨沐《浅析信息学中

浅析信息学中的“分”与“合”福建省福州第三中学杨沐目录【摘要】..................................................................... 错误!未定义书签。

【关键字】................................................................. 错误!未定义书签。

【正文】..................................................................... 错误!未定义书签。

一、引言............................................................... 错误!未定义书签。

二、例题分析 ...................................................... 错误!未定义书签。

[例一]牛奶模版 ............................................ 错误!未定义书签。

[例二]树的重建 ............................................ 错误!未定义书签。

[例三]最优序列 ............................................ 错误!未定义书签。

三、总结............................................................... 错误!未定义书签。

【感谢】..................................................................... 错误!未定义书签。

【参考文献】............................................................. 错误!未定义书签。

国家集训队2004论文集_林涛

国家集训队2004论文集_林涛

线段树的应用广西柳铁一中林涛【摘要】在竞赛解题中,常遇到与区间有关的操作,比如统计若干矩形并的面积,记录一个区间的最值、总量,并在区间的插入、删除和修改中维护这些最值、总量。

线段树拥有良好的树形二分结构,能够高效的完成这些操作,本文将介绍线段树的各种操作以及一些推广。

本文通过3个例子:《蛇》、《空心长方体》、《战场统计系统》,讲述线段树中基本的插入、删除、查找操作,和不规则的修改和删除操作,以及到二维的推广。

关键字:线段树二分子树收缩叶子释放面积树【正文】1. 线段树的定义及特征定义1:线段树一棵二叉树,记为T (a,b),参数a,b表示该节点表示区间[a,b]。

区间的长度b-a记为L。

递归定义T[a,b]:若L>1 :[a, (a+b) div 2]为T的左儿子[(a+b) div 2,b]为T的右儿子。

若L=1 :T为一个叶子节点。

表示区间[1, 10]的线段树表示如下:(以下取对数后均向上取整)定理1:线段树把区间上的任意一条线段都分成不超过2log L条线段证明:(1)在区间(a,b)中,对于线段(c,d),如果(c<=a) 或(d>=b),那么线段在(a,b)中被分为不超过log(b-a)。

用归纳法证明,如果是单位区间,最多被分为一段,成立。

如果区间(a,b)的左儿子与右儿子成立,那么如果当c<=a时,1.若d<=(a+b)div2那么相当与其左儿子分该线段,所分该线段数树不超过log((a+b)div 2-a),即不超过log(b-a),成立。

2.若d>(a+b) div 2那么相当于该线段被分为它左儿子表示的线段,加上右儿子分该线段,线段数不超过1+log(b-(a+b) div 2),也不超过log(b-a),成立。

对于d>=b的情况证明类似,不再赘述。

(2)在区间(a,b)中,对于任意线段也用归纳法证明。

对于单位区间,最多分为一段,成立。

国家集训队2004论文集 许智磊

国家集训队2004论文集 许智磊

证。
设 Suffix(SA[i])=u,Suffix(SA[j])=v,Suffix(SA[k])=w。
由 u=LCP(i,j)v 得 u=pv;同理 v=pw。 于是 Suffix(SA[i])=pSuffix(SA[k]),即 LCP(i,k)≥p。 (1)
不难看出,这种做法是很笨拙的,因为它没有利用到各个后缀之间的有机 联系,所以它的效率不可能很高。即使采用字符串排序中比较高效的 Multi-key Quick Sort,最坏情况的时间复杂度仍然是 O(n2)的,不能满足我们的需要。
第 2 页 共 11 页
IOI2004 国家集训队论文 许智磊
下面介绍倍增算法(Doubling Algorithm),它正是充分利用了各个后缀之间的 联系,将构造后缀数组的最坏时间复杂度成功降至 O(nlogn)。
后 缀 数 组 后 缀 数 组 SA 是 一 个 一 维 数 组 , 它 保 存 1..n 的 某 个 排 列 SA[1],SA[2],...SA[n],并且保证 Suffix(SA[i])<Suffix(SA[i+1]),1≤i<n。也就是将 S 的 n 个后缀从小到大进行排序之后把排好序的后缀的开头位置顺次放入 SA 中。
出 SA2k 的复杂度就是 O(nlogn)。更聪明的方法是采用基数排序,复杂度为 O(n)。 求出 SA2k 之后就可以在 O(n)的时间内根据 SA2k 构造出 Rank2k。因此,从 SAk
和 Rankk 推出 SA2k 和 Rank2k 可以在 O(n)时间内完成。 下面只有一个问题需要解决:如何构造出 SA1 和 Rank1。这个问题非常简单:
IOI2004 国家集训队论文 许智磊
后缀数组
安徽省芜湖市第一中学 许智磊
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“分层图思想”及其在信息学竞赛中的应用天津市南开中学肖天【摘要】本文通过对几道信息学竞赛题的解决,提出了一种解决问题的建模思想——分层图思想。

该思想通过挖掘问题性质,将原问题抽象得出的图复制为若干层并连接形成更大的图,使本来难以用数学语言表达得图论模型变得简明严谨,为进一步解决问题打下了良好的基础。

【关键字】分层图思想图论数学模型最短路信息学竞赛【正文】1 引论人们在借助计算机解决一个实际问题时,无非就是详细地告诉计算机应该怎么做,使它能通过人们给定的输入得到人们想要的输出。

由于一般的计算机只能处理数字信号,所以只有把实际问题转化为数学问题,计算机才能帮助我们。

这一步就是建立数学模型。

数学模型的建立在通过计算机解决问题的过程中非常重要。

它把计算机无法理解的问题加以转化,使一切事物量化,最终变为只含数学过程的问题。

它是人脑与计算机沟通的桥梁。

不仅如此,数学模型的好坏直接影响着人与计算机之间的信息交流,影响着计算机对问题的“理解”。

好的数学模型能够抓住问题的本质,表述简捷明了,易于人们找到有效的解决方法,并通过编制程序的方式将解决方法告诉计算机;相反,对于同一个问题,如果数学模型不能抓住问题本质,人们就可能无法解决问题,或者找不到有效的方法,更不用提告诉计算机如何做了。

由于建立数学模型是为了解决问题,所以人们在做这项工作时往往希望把问题归结为已经很好解决的经典问题或若干这样问题的有机结合。

这样,只要应用前人的研究成果就可以了。

比如,排序、求图的单源最短路、网络流等等都是经典问题,前人不仅给出一般解法,而且对各种特殊情况和变形作了深入的研究。

但事情并不总像人们希望的那样,有的问题即使可以归结为已有问题,在其中加入一些干扰因素后,原有性质就会发生改变,原来建立起的数学模型难以再用严谨的数学语言表达。

这样问题中的部分图论问题可以用本文提出的“分层图思想”解决。

该思想注重对原问题性质的挖掘,通过对原问题数学模型的扩展,将干扰因素融入新的数学模型之中,恢复了模型的严谨性,进而与已解决问题产生联系,得到有效算法。

2 提出“分层图思想”2.1 一个问题的解决例题1:拯救大兵瑞恩1问题简述:有一个长方形的迷宫,被分成了N行M列,共N*M个单元。

两个相邻(有公共边)的单元之间可以互通,或有一扇锁着的门,或者存在一堵不可逾越的墙。

迷宫中一些单元存放着钥匙,且所有的门被分为P类,打开同类门的钥匙相同,打开不同类门的钥匙不同。

(如右图)要求从迷宫左上角走到右下角营救大兵瑞恩,每从一个单元移动到相邻单元记为一步。

只有拿到钥匙,才能打开相应的门。

试求最少步数。

此题的标准解法是动态规划:以拿到的钥匙种类划分阶段,时间复杂度为O(2P N2)。

(详见[1])其实此算法可以用“分层图思想”做出更简明的解释。

首先忽略钥匙和门,那么问题就是在一个给定隐式图中求一条最短路,数学模型很简单:已知图G,其中顶点与地图中的单元一一对应。

当且仅当两格相邻且之间无墙时,他们对应的顶点间有一条边(如右图)。

求从左上角对应顶点到右下角对应顶点最短路长度。

加入钥匙和门的因素,则所求最短路有了一个限制因素,即只有先到存在钥匙的格子,才能通过相应的门。

换句话说,通过图中某些边是有条件的。

所以不能再简单地求最短路了,而是要考虑何时那些边能通过,何时不能通过。

这就要记录拿到了哪些钥匙。

此时,我们需对原模型进行改造:将原图G复制2P个,记为G(s1,s2,…,s P),其中s i=0表示未拿到第i类钥匙,s i=1表示已拿到第i类钥匙,i=1,2,…,P。

对每个图G(s1,s2,…,s P),若s i=0,则将所有i类门对应的边去掉,因为没有此类钥匙不能通过此类门。

再将其余所有边改为双向弧,权为1。

对所有顶点对(u, v)及整数i,若它满足l u、v分别在G(s1,s2,… , s i-1,0, s i+1,…,s P)、G(s1,s2,… , s i-1,1, s i+1,…,s P)中,且均对应(x, y)单元l(x, y)格中有i类钥匙则添加有向弧uv,权为0,表示走到(x, y)单元就可以由未拿到第i类钥匙转变为已拿到第i类钥匙,而不需要消耗额外的步数。

这样,这2P个图被连成了一个2P“层”的有向图(如下图)。

问题转化为求由该图G(0,0,…,0)层表示左上角的顶点到每一层表示右下角的顶点的最短路长度的最小值。

注意,这里需要求的不是到G(1,1,…,1) 层表示右下角的顶点的最1选自1999年国际信息学奥林匹克中国国家队组队选拔赛,题目全文见参考文献[1]短路长度,因为要成功营救大兵瑞恩很可能并不需要拿全所有的钥匙。

2.2 小结可见,用此思想可以建立起更简洁、严谨的数学模型,进而很容易得到有效算法。

重要的是,新建立的图有一些很好的性质:由于层是由复制得到的,所以所有层都非常相似,以至于我们只要在逻辑上分出层的概念即可,根本不用在程序中进行新层的存储,甚至几乎不需要花时间去处理。

由于层之间的相似性,很多计算结果都是相同的。

所以我们只需对这些计算进行一次,把结果存起来,而不需要反复计算。

如此看来,虽然看起来图变大了,但实际上问题的规模并没有变大。

层之间是拓扑有序的。

这也就意味着在层之间可以很容易实现递推等处理,为发现有效算法打下了良好的基础。

上述特点在例1的解决中体现得并不明显,所以本文给出的算法并不比标准算法更好。

但这些特点说明这个分层图思想还是很有潜力的,尤其是各层有很多公共计算结果这一点,有可能大大消除冗余计算,进而降低算法时间复杂度。

我们可以在下一个例子中看到这些。

3 分层图思想的应用例题2:迷宫改造2题目简述:有一个长方形迷宫,其在南北方向被划分为N行,在东西方向被划分为M列,于是整个迷宫被划分为N*M个单元。

我们用一个有序对(单元的行号,单元的列号)来表示单元位置。

南北或东西方向相邻的两个单元之间可能存在一堵墙,也可能没有,墙是不可逾越的。

假定有P个人,他们分别从P个指定的起点出发,要求2选自1999年全国青少年信息学奥林匹克冬令营比赛,文中引用的是此题第二问的一部分,题目全文见附录他们只能向南或向东移动,分别到达P 个指定的终点。

问至少拆掉多少堵墙使得这是可行的(墙拆掉后可以任意通行),即所有的人可以从各自的起点出发依照游戏规则到达各自的终点。

参数限定:3≤N ,M ≤20;1≤P ≤3为说明方便,下面我们只讨论M =N ,P =3的情况。

(P <3时,可以添加起点终点重合的人而使P 达到3)解法1:仿照《方格取数》3一题进行动态规划。

以平行于副对角线的斜线划分阶段,令S (i ,x 1,x 2,x 3)表示三个人分别走到第i 条斜线上第x 1,x 2,x 3行需要拆掉的最少墙数。

对于每一个状态,每个人有向南和向东两种走法,共23=8中决策。

则有状态转移方程+−+−−+−−+−−−+−−+−−−+−−−+−−−−=?),,,1(?)1,,,1(?),1,,1(?)1,1,,1(?),,1,1(?)1,,1,1(?),1,1,1(?)1,1,1,1(min ),,,(321321321321321321321321321x x x i S x x x i S x x x i S x x x i S x x x i S x x x i S x x x i S x x x i S x x x i S其中,?表示相应决策需要拆的墙数,显然它只能在{0,1,2,3}中取值。

由于情况较多,这里不再赘述。

另外,由于每个人的起点并不一定在地图左上角,终点也不一定在地图右下角,所以递推时还要处理一些细节。

详见附录中的程序。

此算法的时间复杂度为O(N 4)。

解法2:应用分层图思想建立数学模型,将问题转化为最短路问题我们先来分析一下本题的特点。

首先,每个人移动路线的可行性是不受其他成员影响的,而在计算代价时不同人之间仅当他们经过同一堵墙时才有关系。

如果忽略这种关系,那么每个人的路线应是他起点终点之间的一条最短路。

换句话说,有的人可能会迁就其他人而导致其路线不是最短路,但他们不在公共路线上时每个成员的路线都是最短路。

我们定义:定义1:纯路段是某一可行解的一部分,他与每个家庭成员路线的交集要么是空集,要么是它本身(即它是该成员路线的一部分)。

直观的说,某一可行解的纯路段不分岔。

定义2:极大纯路段是某个可行解的纯路段,但不是该解中任何其它纯路段的子路段。

这样,我们刚才得到的性质就可以表述为:最优解中的每个纯路段都是连接其两端点的最短路。

所以,一个最优解可以由其中所有极大纯路段端点的集合唯一确定。

于是我们就有了一个最朴素的算法:枚举这些端点。

虽然这个算法的时3全国青少年信息学奥林匹克分区联赛复赛高中组第4题,原文及解法见参考文献[2]间复杂度令人难以忍受,但他给了我们一个思路,即充分利用纯路段的最短路性质。

让我们进一步挖掘此题特点。

此题与普通求最短路的问题最大的区别在于其中有多个人,他们有公共路段时,该路段的权只被计算一次。

因此抓住公共路段是解决问题的关键。

经分析可以发现公共路段有以下特点:定理1:存在一最优解,其中任两个人的公共路段不会多于一条,即任两个人的路线不会在会合、分离之后再次会合。

证明:假设某一最优解T中存在两个人A、B,他们在P点分离后又在Q点会合,设他们在P、Q之间的路线的权分别为W A、W B。

则他们在P、Q之间的总代价为W=W A+W B。

那么必然存在另一可行解T’,它与T的唯一差别是B在P、Q之间的路线改为与A相同。

则T’中A、B在P、Q之间的总代价为W’=W A。

由于W’≤W,所以T’也是最优解。

因此可以通过有限次像上面的变换去掉某一最优解中的所有“会合——分离——再会合”的情况而保持其最优解的性质。

证毕。

定理2:当P≤3时,存在一最优解,其中所有人的路线之并集无环。

(路线看作是无向路径)证明:这实际是对定理1的简单推广。

假设某一最优解T中有环,且应用定理1去掉两人产生的环之后仍存在环。

那么该环必然由三人产生,且只有右图一种情况。

类似于定理1的证明,C人的PS段路线显然可以由PQRS代替,而省去PS段的费用,新得到的解必是最优解。

如此总能得到无环的最优解。

证毕。

定理3:当P≤3时,对一个无环的最优解T,其中的所有公共路段可以用一条从左上角到右下角的路线覆盖。

证明:假设T中有两条公共路段不能被一条从左上角到右下角的假想路线覆盖,那么显然他们不能属于同一个人的路线(否则此人的路线即满足要求)。

又因每条公共路段至少属于两人,所以P≥4。

与P≤3矛盾。

证毕。

定义:对于一个最优解T,如果一条从左上角到右下角的路线可以覆盖T中的所有公共路段,则称该路线为T的主路线。

这样,一个最优解可以这样描述:它是由一条主路线和一些从主路线伸向各成员起点和终点的支路线组成的。

相关文档
最新文档