浅谈数据的合理组织53807.docx
《浅谈数据的合理组织53807.docx》由会员分享,可在线阅读,更多相关《浅谈数据的合理组织53807.docx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浅谈数据的合理组织【摘要】信息学是一一门高深深的学科科,它正正在高速速的发展展。随着着信息学学的发展展,其题题目中的的关系也也变得越越来越错错宗复杂杂,给我我们解题题带来困困难。对对数据进行行合理地组织,正正是我们们面对上上述题目目时的一一种有效效手段。本文用几个个经典例例题从数数据的结结构和顺顺序两个个方面进进行合理理组织,达达到优化化模型或或是提升升算法效效率的目目的。介介绍了“合合理组织织数据”在在信息学学中建立立模型和和优化算算法方面面的一些应用用,例题题包含了了动态规规划、数数据结构构、图论论类型的的题目。目的在在于引起起读者对于于数据的的合理组组织的关关注,并并在今后后的解题题中能
2、积极并灵灵活地运运用这一一手段。【关键字】组织数据数据结结构动动态规划划图树序序列【正文】【引言】一个简单的的例子:给出N个数数字(数字会会比较大大),然后给给出一些些询问,询询问一个个数字有有没有在在给出的的N个数字字当中。当然我们有有很多已已知的办办法:HASH表表、TRRIE、预预排序+二分查查找这些算法都都是通过过对数据据进行合合理的组组织而起起到了减减少工作作量的作作用。不同的是HHASHH表和TRRIE是是利用数数据形式式的重新新组织,而而预排序序二分分查找是是通过对对数据顺顺序的重重新组织织来达到到优化算算法的目目的的。我我们组织织数据,主主要就是是通过从从“形式式”和“顺顺序”
3、这这两个角角度来考考虑。事事实上,这这两个方方面在实实际运用用中往往往不是独独立的,通通常需要要联合运运用。我们已经学学习了很很多经典典的数据据结构,它它们都是是合理组组织数据据的表现现。在优优化算法法中有很很好表现现。对数数据组织织的合理理化,不不仅在我我们设计计算法时时能起到到优化程程序效率率的作用用,有时时,我们们在建立立解题模模型时,合合理地组组织数据据可能给给我们提提供新的的思考角角度,从从而优化化解题模模型,例例一就是是这样的的一个例子子。例一金金明的预预算方案案及其加加强版金明的预算算方案【题意描述述】给出N个物物品,每每个物品品都有一一个权值值(5500000)和和一个价价格(
4、100000)。我们们称可以以直接被被购买的的物品为为主件,称称不能被被直接购购买的物物品为附附件,附附件只有有当其主主件被购购买了才才能被购购买,一一个主件件最多有有两个附附件,附附件没有有下一级级附件。任务购买一一些物品品,总价价格不超超过M,使得得被购买买的物品品的权值值之和最最大。N32000 MM600【简要分析析】我们很容易易联想到到经典的的动态规规划之00-1背包问问题。但是题目与与背包却却有一些些差别:附件不不能被直直接购买买。【对数据的的初步组组织】主件与附件件之间是是树形的的关系。组组织一下下数据,如如下图:(图1)如图所示:主件1没有有附件,主主件2有两个个附件,主主件3
5、只有一一个附件件。【数据组织织方案一一】假设我们忽忽略数据据的特殊殊性,单单从树结结构考虑虑,我们们容易想想到的一一个算法法是:给所有主件件加上一一个“级级超主件件”,把把原来的的所有主主件都变变成“超超级主件件”的附附件,如如下图: (图2)【算法一】这样,在这这棵树上上,我们们可以设设计一个个动态规规划算法法:定义:costa表表示a节点所所代表的的物品的的价格scoreea表示a节点所所代表的的物品的的得分状态faabb表示示以节点点a为根的的子树,总总共花费费不超过过b元的最最多得分分。状态转移方方程:fab=Maxxfc1b11+ffc22bb2+fcc3b3.fcckbk+ssco
6、rreaa;其中ci为为a的子节节点;bi=b-ccostta;这样枚举的的效率显显然不高高!我们可以用用左儿子子右兄弟弟表示法法来表示示这一棵棵树,将将原树转转化成二二叉树,则则我们在在进行状状态转移移的时候候只用考考虑给左左儿子分分配多少少钱。lefta表表示a的左儿儿子rightta表示a的右儿儿子fab=MaxxMaaxffleeftablleftt+ffriighttabb-coosta-bleeft+sscorreaa,ffriighttabb这样我们可可以得到到一个理理论 参见算法艺术与信息学竞赛贪食的九头龙中对算法复杂度的分析复杂杂度为OO(NMM2)的算法法,但是是对于本本题
7、的数数据范围围来说,这这个复杂杂度并不不太理想想。【数据组织织方案二二】上面我们把把本题同同0-1背包进进行了类类比。发发现两道道题之间间的差别别:附件件不能被被直接购购买。显显然,如如果题目目中没有有附件,那那么本题题即为标标准的001背包包问题。我们回到题题目并考考虑其特特殊性:1.附件没没有附件件。2.每个主主件最多多只有22个附件件。这样,显然然对于(图图一)中中每一组组(主件件附件件),可可以作为为整体考考虑。对于每一组组,可能能的购买买方案最最多只有有:1.什么都都不买2.只购买买主件3.购买主主件和附附件14.购买主主件和附附件25.购买主主件和两两个附件件这样,我们们可以借借鉴
8、经典典的011背包动动态规划划,把每每一组看看作一个个对象,取取值和花花费对应应最多五五种。【算法二】costik表表示分组组后第ii个对象象的第kk种购买买方案的的花费。weighhtiikk表示示分组后后第i个对象象的第kk种购买买方案的的总权值值。Fij表表示前ii个对象象最多花花费j元,能能得到的的最大权权值。Fij=maxx(Fi-11jj-coostik+weeighhtiikk);其中1=k=5且cosstiikk=j状态总数:O(NNM)转移代价:O(11)这样,我们们得到了了一个时时间复杂杂度为OO(NMM)的优秀算法法。郁闷的金明明【题意描述述】给出N个物物品,可可以直接接
9、被购买买的称为为主件,而而不能直直接被购购买的称称为附件件,附件件只有当当其主件件被购买买了才能能被购买买,一个个主件可可以有任任意多个个附件,附附件没有有下一级级附件。每每个物品品都有一一个权值值(5500000)。任务购买一一些物品品,总价价格不超超过M,使得得被购买买的物品品的权值值之和最最大。N60M=ccostti),Fi+11jj00情况II:第i个物品品是附件件如果k=11 Fijk= MaaxFFi+1j-ccostti11+wweigghti(j=cosstii),Fii+1j1如果k=00 Fijk= Fi+11jj00状态总数:O(NNM)转移代价:O(11)时间复杂度度
10、同样是是O(NNM)。很郁闷的金金明【题意描述述】给出N个物物品,可可以直接接被购买买的称为为主件,而而不能直直接被购购买的称称为附件件,附件件只有当当其主件件被购买买了才能能被购买买,一个个主件可可以有任任意多个个附件,附附件可以以有多级级,也就就是说如如果某个个物品是是附件,那那么它还还有可能能有附属属于它的的下一级级附件。每个物品都有一个权值(50000)。任务购买一一些物品品,总价价格不超超过M,使得得被购买买的物品品的权值值之和最最大。N60M32000【问题分析析】现在题目在在原题的的基础上上不仅放放宽了附附件的个个数,还还放宽了了附件的的层数,如图所所示:从上图中,我我们可以以对
11、本题题有一个个感性的的认识:关系又又“宽”又又“深”。我们依然试试着从前前面的题题目中寻寻找算法法:我们可以直直接套用用算法11,因为为该算法法正好将将数据作作为树结结构来进进行处理理。而利利用了题题目特殊殊条件的的算法22和算法法3,直接套套用算法法肯定是是行不通通的。但是他们都都很有启启发性:抛弃树树形的结结构,重重新组织织成线形形。现在的题目目是不是是也可以以类似解解决呢?【组织数据据方案四四】算法3相对对来说比比较算法法2更加一一般,所所以现在在我们再再回过头头来研究究一下算算法3,希望望在分析析过程中中找到一一些灵感感。回忆算法33的思路路:把同在一个个组的主主件放在在附件的的前面,
12、利利用动态态规划“加加一维”的的思想,顺顺利地实实现了将将问题转转化到序序列上来来。关键字:主主件在前前序列列动态态规划我们联想到到利用树树的先根根遍历序序,而且且正好满满足上面面的关系系。但是这样有有什么好好处吗?还能进进行动态态规划吗吗?怎样设设计状态态才能传传递父节点的状状态呢?我们再回过过去看算算法3的状态态转移:假设当前状状态是FFijk,且k=0。如果i是附附件,那那么实际际上在到到达下一一个主件件以前,i后面的附件是都不会被购买的。上图中,对对于附件件a,实际际上一个个k=00的状态态传递下下去是没没有意义义的,因因为附件件b和附件件c也必然然不能被被购买。思考并总结结上面的的结
13、论:对于一个主主件,我我们如果果不购买买的话,那那么其附附件我们们都不用用考虑,而而直接“跳跳”到下下一个主主件。我们把它应应用到本本题中来来:重要结论我我们考虑虑一棵子子树的时时候,如如果我们们不购买买其根节节点,那那么其子子树中所所有节点点我们都都不必讨讨论了。这一结论似似乎很显显然,但但是我们们并不是是要在树树结构中中用这一一结论。正正如上面面提到的的,我们们要在树树的先根根遍序上上进行动动态规划划,而这这一结论论正是我我们成功功的关键键。【算法4】根据前面的的思考,我我们先依依次求出出每棵树树的先根根遍历序序,并保保存在同同一个序序列liist中。为了利用上上面的结结论,我我们还要要求
14、出以以节点ii为根的的子树的的节点总总数coountti。现在我们来来设计动动态规划划算法:定义:costi表表示第ii个物品品的价格格weighhtii表示示第i个物品品的权值值Fij表表示从第第i个物品品到第nn个物品品,最多多花费jj元,能能得到的的最大权权值和。状态转移:对于一个节节点,我我们考虑虑是否购购买它:购买:那么么我们继继续考虑虑它后面面的节点点不购买:那那么我们们跳过它它的子孙孙节点方程如下:Fij=MaxxFi+11jj-coostlisstii+weiighttliisti,Fi+ccounntllisttij这个算法依依然是OO(NMM)的,很完完美地解解决了本本题。
15、并并且,这个算算法模型型对于以以前有很很多类似似的树形形动态规规划题目目都适用用,这是是我们在在分析本本题的过过程中的意外外收获。【小结】这是一道很很有启发发性的道道目。反反思这一一题的几几个不同同难度的的版本,不不难发现现我们最最终都用用线形模模型上的的动态规规划取代代了容易易想到的的树形动动态规划划算法。我们再次分析前面的算法,试图发现其中内在的一些东西。其实我们这个题主要就是对于树形结构和线形结构的选择,所以我们对比算法4和算法1:不难发现,相比算法4,算法1其实多出的操作就是枚举分配给左儿子多少钱。而在线形的的序列上上,没有有用的钱钱自然地地被分配配给后面面的元素素。也就就是说:树的形
16、形态决定定了在状状态转移移的时候候要进行行额外的的枚举。这正是树形动态规划算法的瓶颈所在!而我们利用树的先根遍历序将转树形转化为线形序列,成功地避免了树形形态的限制,正是合理地组织数据。我们得到的的启示:凭第一感感觉想出出来的模模型不一一定是最最好的,对对于一个个题目,我我们充分分挖掘其其数据关关系并加加以利用用,合理理地组织织数据并并且尝试试用已有有的知识识来解决决,推陈陈出新,才才能不断断地进步步。前面我们在在树据的的组织结结构上进进行了合合理地安安排,成成功地对对于每一一次加强强的题目目都设计计出了优优秀的算算法,下下面,我我们来看看一看“顺顺序”的的合理安安排的例例子:例二树树的果实实
17、【题意描述述】给出一棵有有N个节点点的有根根树(根根为1号节点点),每每个节点点有权值值。要求对于每每一个节节点,求求:1.其子树树中权值值比该节节点大的的节点总总数2.树上除除其子孙孙节点外外比该节节点大的的节点总总数3.从根节节点到该该节点路路径中比比该节点点大的节节点总数数其中(1=N=1005)【问题分析析】对于要求的的后面两两个值,我我们很容容易想到到O(NNlogg2(N)的算算法:树上除其子子孙节点点外比该该节点大大的节点点总数:直接排排序,在在待统计计节点前前的与该该节点权权值不同同的个数数再减去去问题11的答案案即为所所求。从根节点到到该节点点路径中中比该节节点大的的节点总总
18、数:以以权值为为关键字字构造线线段树(若权值值大可行行离散化化处理),深度度优先遍遍历树上上节点,用用栈记录录下到节节点的路路径,并并把当前前节点插插入线段段树,在在线段树树中我们们记录区区间的元元素个数数,当前前节点权权值到最最大权值值这个区区间中元元素个数数即为所所求,我我们再递递归处理理子树,在在子树访访问完毕毕后还须须把该节节点从线线段树中中删除。我们最大的的困难在在于求:其子子树中权权值比该该节点大大的节点点总数O(N2)的朴素素统计方方法是很很容易想想到的,但但是本题题的数据据规模达达到1005,O(NN2)的复杂杂度显然然太高。我我们自然然想到利用用线段树树、树状状数组这这些优秀
19、秀的统计计数据结结构来进进行题目目中要求求的统计计任务。但是这这些数据据结构都都是用于于线型序列列统计的的,并且且似乎没没有改造造版本用用于树形形结构。既然没有办办法改造造数据结结构,那那么我们们转换数数据形态态把把树转化化为序列列再进行行统计,先根遍历序即是我们转换后的理想形态。我们给出一一个例子子:同一棵子树树构成一一个连续续的区间间,这正正方便了了我们的的统计。我们定义:一个元素所所在子树树在遍历历序中构构成的区区间叫作作元素所所在区间间。元素相比较较都指其其权值大大小相比比较。现在问题已已经转化化成为:给出一个序序列,每每个元素素有权值值。对于于每一个个元素,统计一个区间中有多少元素比
20、该元素大。这正是我们们比较熟熟悉的序序列上的的统计问问题。下下面我们们研究转转化后的的问题:【数据组织织方案一一】我们不对数数据进行行更深入入的组织织,直接接利用先先根遍历历序,强强制用数数据结构构来进行行统计。当然我们可以构造出一种比较有效的嵌套数据结构以有序表为元素的线段树,如图:其中,线段段树的每每一个节节点是对对应区间间的元素素以权值值为关键键字的有有序表。这样,预处处理可以以用一个个归并排排序,求求得树上上所有区区间的有有序表。时时间复杂杂度为OO(Nllog22(N)。假设现在我我们要统统计一个个区间(长度为为L)。那么我们可可以用llog22(L)的时时间找到到该区间间的所有有分
21、解区区间(不超过过2logg2(L)个)。然后后在对每每个分解解区间进进行处理理:二分分查找在在该区间间中有多多少元素素的权值值比指定定的元素素的权值值大。然后把所有有分解区区间中比比给定元元素大的的元素个个数加起起来,即即为所求求。这样每统计计一个元元素的复复杂度为为O(llog222(N)。总时时间复杂杂度为OO(Nllog222(N),空间间复杂度度为O(Nloog2(N)。【数据组织织方案二二】我们从特殊殊情况考考虑:假假设我们们在先根根遍历序序中,需需要统计计元素kk,并且k所在区区间里的的元素都都比它大大。显然,这时时比k大的元元素个数数就是kk所在区区间中的的元素个个数。统统计区
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅谈 数据 合理 组织 53807
限制150内