6.何森《浅谈数据的合理组织》总结.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 四川省绵阳南山中学 何森 浅谈数据的合理组织 引子 题目越来越难——数据关系越来越复杂! 对组织数据的要求越来越高! 合理组织在解题中越来越重要! 【题意描述】 给出N个物品,每个物品都有一个权值 50000 和一个价格 10000 。我们称可以直接被购买的物品为主件,称不能被直接购买的物品为附件,附件只有当其主件被购买了才能被购买,一个主件最多有两个附件,附件没有下一级附件。 【任务】 用不超过M元钱,购买一些物品,使得被购买的物品的总权值最大。 金明的预算方案 【数据规模】 N 60  M 3200 题目中给出的主件与附件间形成树形结构,而所有的物品间形成森林结构。为了方便起见,我们给所有的主件都加上一个“上级主件”,这样,所有的物品形成了一棵树。 数据的初步组织 树形动态规划算法! 算法1 状态F[i][j]表示给以i为根的子树,总共花费不超过j元,所能取得的最大权值和。 枚举量太大,效率不高! 总花费不超过j 用左儿子右兄弟表示法来表示这一棵树! 时间复杂度为 O NM2 状态总数 O MN 状态转移代价 O M N*M*M 6*108 ,不太理想。 状态F[i][j]表示以i为根的子树总共花费j元能获得的最大权值和。 我们只需要枚举给左子树分配多少钱,剩下的钱都分给右子树。 我们把配套的主件和附件看成一组。 这样,显然对于每一组,可能的购买方案最多只有如下五种: 我们换一种数据组织方式 1. 附件没有附件。 2. 每个主件最多只有两个附件。 考虑本题特殊条件: 1.什么都不买 2.只购买主件 3.购买主件和附件1 4.购买主件和附件2 5.全购买 类似经典的0-1背包问题! 组织数据后,我们可以得到复杂度为O NM 的优秀算法 状态总数 O MN 状态转移代价 O 1 郁闷的金明 【题意描述】 给出N个物品,每个物品都有一个权值 50000 和一个价格 10000 。我们称可以直接被购买的物品为主件,称不能被直接购买的物品为附件,附件只有当其主件被购买了才能被购买,主件可以有任意多附件,附件没有下一级附件。 【任务】 用不超过M元钱,购买一些物品,使得被购买的物品的总权值最大。 【数据规模】 N 60  M 3200 题目放宽了“一个主件最多可以有两个附件”这个限制。 问题分析 × √ 依然适用 效率 数据组织方式 - 以组为元素的序列 × 以物品为节点的树形结构 我们需要重新组织数据! 我们回想上题的数据组织方式。 重新安排这些物品的顺序,使得每个附件都紧跟其主件,保证其前面的最近的主件就是它附属的主件。如下图: 数据组织方案二 主件1 附件 主件2 附件 附件 主件3 附件 附件 附件 附件 树 序列 状态F[i][j][k]表示从第i个物品到第n个物品,最多花费j元,k表示i物品前面的主件有没有被购买,的最大价值和。 这样组织数据以后,一个附件能被购买的必要条件是“其前面的最近的主件被购买了”。 算法3 主件1 附件 主件2 附件 附件 主件3 附件 附件 附件 附件 K 0 主件2没有被购买 K 1 主件2有被购买 状态总数 O NM*2 状态转移代价 O 1 时间复杂度 O NM 算法3 重新组织数据后,我们再次成功地设计出了O NM 的算法。 【题意描述】 给出N个物品,每个物品都有一个权值 50000 和一个价格 10000 。我们称可以直接被购买的物品为主件,称不能被直接购买的物品为附件,附件只有当其主件被购买了才能被购买,主件可以有任意多附件,可以有多级附件。 很郁闷的金明 【任务】 用不超过M元钱,购买一些物品,使得被购买的物品的总权值最大。 【数据规模】 N 60  M 3200 现在的题目在原题的基础条件上不仅增加附件的个数,还出现了多级附件。 问题分析 这是很一般的树! 一般的树形结构,我们还能不能用前面的数据组织方式呢? × × √ 依然适用 - 以组为元素的序列 - 附件紧跟其主件的序列 效率 数据组织方式 × 以物品为节点的树形结构 说明这些数据组织方式都不合理,需要再次重新组织数据! 现在我们再回过头来研究一下前面一种数据组织方式: 把同在一个组的主件放在附件的前面,将树形问题转化到序列上来。 而现在的问题是: 树的高度增加了。 组织数据方案三 考虑:树的先根遍历序。 仔细思考算法3的状态转移: 主件1 附件 主件2 附件 附件 主件3 附件 附件 附件 附件 K 0 迁移到本题中,对于一棵子树,如果我们不购买其根结点,那么其子孙都不必讨论了(因为其子孙节点都不能被购买) 但是我们不能用加一维的方法来记录每个附件的主件是否被购买了!   这一结论似乎很显然,但是我们并不是要在树形结构中运用这一结论。 正如上面提到的,我们要在树

文档评论(0)

5201394 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档