电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

ACM基础算法入门

  • 资源ID:135689644       资源大小:667.50KB        全文页数:32页
  • 资源格式: PPT        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

ACM基础算法入门

ACM基础算法入门 基础动态规划 基础的 穷竭搜索 贪心的三种区间问题 数论那些事 二分的另类法 1 引言 算法简单但思想及其重要介绍的算法都堪称为经典中的经典 2 基础动态规划 多阶段决策过程最优化的数学方法三要素 阶段 决策 状态 3 动态规划的适用范围 最优子结构 最优化原理 当前状态依赖于前面的状态得到 是前面状态的完美总结无后效性 不成环 4 经典模型 数塔模型背包问题区间最大和模型最长非降子序列模型最长公共子序列数字归并 区间dp 旅行商问题 状态压缩 5 求解从顶到下经过节点的最大值是多少 6 解题思路 列状态v I j 表示走到第i层的第j个节点的最大值分阶段每一个层就是一个阶段状态转移方程 决策 V i 1 j V I j v I j 1 V I j v I j 1 7 单调递增非降子序列 给定一整型数列 a1 a2 an 0 n 100000 找出单调递增最长子序列 并求出其长度 如 1910511213的最长单调递增子序列是19101113 长度为5 8 解题思路 定义状态dp i 以i为结束节点最长单调子序列长度阶段每一个点选择过程即阶段转移方程 Dp i max dp 1 i 1 1想想有没有更好的方法 9 dp总结 模型匹配法三要素法先确定阶段 数塔问题 先确定状态 一般题目都是 先确定决策 背包问题 10 贪心的三种区间问题 选择不相交区间区间选点区间覆盖 11 选择不相交区间 数轴上有n个开区间 ai bi 选择尽量多个区间 使得这些区间两两没有公共点 分析 首先明确一个问题 假设有两个区间x y 区间x完全包含y 那么 选x是不划算的 因为x和y最多只能选一个 选x不如选y 这样不仅区间数目不会减少 而且给其他区间留出了更多的位置 接下来 按照bi从小到大的顺序对所有区间排序 12 会场安排问题 先对n个区间按照bi从小到大的顺序排序 如果bi相同 则ai按照从大到小的顺序排序 然后从前往后扫描每个区间 找出所有的符合条件的区间 注意 排序后第一个区间一定会选 因为它的bi最小 它不影响后面区间的选取 而且如果不选此区间 最终求出的区间数目会变少 13 区间选点问题 数轴上有n个闭区间 ai bi 取尽量少的点 使得每个区间内都至少有一个点 不同区间内含的点可以是同一个 分析 如果区间i内已经有一个点被取到 我们称此区间已经被满足 受上一题的启发 我们先讨论区间包含的情况 由于小区间被满足时大区间一定也被满足 所以在区间包含的情况下 大区间不需要考虑 因此 我们把所有区间按b从小到大排序 b相同时a从大到小排序 则如果出现区间包含的情况 小区间一定排在前面 第一个区间应该选取哪一个点呢 正确的贪心策略是 取最后一个点 如下图 14 解题思路 根据刚才的讨论 所有需要考虑的区间的a也是递增的 我们把它画成上图的形式 如果第一个区间不选最后一个点 而是去中间的 如灰色点 那么把它移动到最后一个点后 被满足的区间增加了 而且原先被满足的区间现在一定被满足 这样才能保证选取的点最少 15 区间覆盖问题 数轴上有n个闭区间 ai bi 选择尽量少的区间覆盖一条指定线段 s t 分析 本题的突破口仍然是区间包含和排序扫描 不过要先进行一次预处理 每个区间在 s t 外的部分都应该预先被切掉 因为它们的存在是毫无意义的 例如要覆盖线段 3 5 闭区间 0 1 的存在无意义 在预处理后 在相互包含的情况下 小区间显然不应该被考虑 16 解题思路 把各区间按照a从小到大顺序 如果区间1的起点不是s 则无解 即 s t 无法被完全覆盖 因为其他区间的起点更大 不可能覆盖到s点 否则选择起点在s的最长区间 选择此区间 ai bi 后 新的起点应该被设置为bi 并且忽略所有区间在bi之前的部分 就像预处理一样 虽然贪心策略比上面的题复杂 但是仍然只需要一次扫描 如下图5所示 s为当前有效起点 此前部分已被覆盖 则应该选择区间2 s 17 穷竭搜索是指将所有的可能性罗列出来 在其中寻找答案的方法 概念 这里 我们主要介绍 深度优先搜索 宽度优先搜索 基础的 穷竭搜索 18 深度优先搜索 深度优先搜索 DFS Depth FirstSearch 是搜索的手段之一 它从某个状态开始 不断地转移状态直到无法转移 然后回退到前一步的状态 继续转移到其他状态 如此不断重复 直至找到最终的解 根据深度优先搜索的特点 采用递归函数实现比较简单 19 例题 给定整数a1 a2 a3 an 判断是否可以从中选出若干个数 使他们的和恰好为k 限制条件 1 n 20 10 8 ai 10 8 10 8 k 10 8输入 41 2 4 713输出 Yes 输入 41 2 4 715输出 No 20 解题过程 i 3sum 2 i 1sum 1 i 1sum 0 i 2sum 0 i 0sum 0 i 3sum 6 i 2sum 2 1 4 2 从a1开始按顺序决定每个数加或不加 在全部n个数决定后在判断他们的和是不是k即可 21 宽度优先搜索 宽度优先搜索 BFS Breadth FirstSearch 也是搜索的手段之一 与深度优先搜索类似 从某个状态出发探索所有可以到达的状态 与深度优先搜索的不同在于搜索的顺序 宽度优先搜索总是先搜索距离初始状态近的状态 也就是说它是按照开始状态 只需1次转移就可到达的所有状态 只需2次转移就可到达的状态 这样的顺序进行搜索 对于同一状态 宽度优先搜索只经过一次 因此复杂度为O 状态数 转移的方式 根据宽度优先搜索的特点 采用队列进行实现 22 例题 水池数目南阳理工学院校园里有一些小河和一些湖泊 现在 我们把它们通一看成水池 假设有一张我们学校的某处的地图 这个地图上仅标识了此处是否是水池 现在 你的任务来了 请用计算机算出该地图中共有几个水池 输入m行每行输入n个数 表示此处有水还是没水 1表示此处是水池 0表示此处是地面 0 m 1000 n 100输入 34100000111110输出 2 输入 551111000101000001110000111输出 3 23 解题过程 本题是简单的搜索问题 采用深度优先遍历可以解决 根据题目要求 假设从任意一点值为 1 的出发 将这点的坐标上下左右全部用 0 替换 1次DFS后与初始动这个 1 连接的 1 全部被替换成 0 因此 直到图中不再存在 1 为至 总共进行的DFS的次数就是最后的结果咯 那么 根据题目要求 有4个方向 时间复杂度为O 4 n m 24 数论那些事 数学 特别是数论与计算机科学有着密切的联系 所以也常被选作题材 虽然数学问题大多需要使用特定方法求解 但其中有几个基础算法扮演着重要的角色 25 数论基础 辗转相除法有关素数的基础算法快速幂 1 求最大公约数2 扩展欧几里得3 ax by gcd a b 1 埃氏筛法2 区间筛法 26 辗转相除法 扩展欧几里得双六一个双六上面有向前向后无限延续的格子 每个格子都写有整数 其中0号格子是起点 1号格子是终点 而骰子上只有a b a b四个整数 所以根据a和b的值的不同 有可能无法到达终点 格子如下 4 3 2 101234 掷出四个整数各多少次可以到达终点 输出任意一组解 1 a b 10 9输入 4 11输出 3001 27 解题过程 这个问题用数学语言表述就是 求整数x和y使得ax by 1 可以发现如果gcd a b 1 无解 反之 则可以通过扩展辗转相除法来求解 设a b 1 显然当b 0 gcd a b a 此时x 1 y 0 2 ab 0时设ax1 by1 gcd a b bx2 amodb y2 gcd b amodb 根据朴素的欧几里德原理有gcd a b gcd b amodb 则 ax1 by1 bx2 amodb y2 即 ax1 by1 bx2 a a b b y2 ay2 bx2 a b by2 根据恒等定理得 x1 y2 y1 x2 a b y2 这样我们就得到了求解x1 y1的方法 x1 y1的值基于x2 y2 上面的思想是以递归定义的 因为gcd不断的递归求解一定会有个时候b 0 所以递归可以结束 28 埃氏筛法 给定整数n 请问n以内多少个素数n 10 6输入25输出9 29 解题思路 要枚举n以内素数 可以用埃氏筛法列出2以后的所有序列 2345678910111213141516171819202122232425标出序列中的第一个素数 也就是2 序列变成 23456789101112131415161718192021222324252将剩下序列中 划摽2的倍数 序列变成 23456789101112131415161718192021222324254681012141618202224 划出的数 如果现在这个序列中最大数小于最后一个标出的素数的平方 那么剩下的序列中所有的数都是素数 否则回到第二步 本例中 因为25大于2的平方 我们返回第二步 剩下的序列中第一个素数是3 将主序列中3的倍数划出 主序列变成 2345678910111213141516171819202122232425468910121415161820212224 划出的数 我们得到的素数有 2 325仍然大于3的平方 所以我们还要返回第二步 现在序列中第一个素数是5 同样将序列中5的倍数划出 主序列成了 234567891011121314151617181920212223242546891012141516182021222425 划出的数 我们得到的素数有 235 因为25等于5的平方 跳出循环 结论 去掉数字 2到25之间的素数是 23571113171923 30 总结 算法竞赛是展示大学生创新能力 团队精神和在压力下编写程序 分析和解决问题能力的竞赛 在此送上楼教主一句名言 虽然我不会这道题 但是AC还是没有问题的 31 谢谢 thankyou 32

注意事项

本文(ACM基础算法入门)为本站会员(日度)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.