当前位置:主页 > 计算机电子书 > 计算机理论 > Python算法下载
高效算法:竞赛、应试与提高必修128例

高效算法:竞赛、应试与提高必修128例 PDF 完整超清版

  • 更新:2023-08-13
  • 大小:8.1 MB
  • 类别:Python算法
  • 作者:克里斯托弗
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

《高效算法:竞赛、应试与提高必修128例》是一本对于提升Python编程技巧和算法能力非常有益的法国畅销书。这本书以128个简单实用的算法实例为基础,透彻讲解了基于Python的高效算法思路和编程要点。通过学习本书,读者可以战胜编程竞赛中的技术难关。本书还在线提供更多趣题和拓展实战例子,帮助读者进一步巩固所学知识。这些算法实例的讲解源自国际编程大赛导师的经验精髓,使得读者能够从中得到更深层次的启发和指导。对于那些希望提升编程技能和算法水平的读者来说,这本书是一本不可多得的参考书。

高效算法:竞赛、应试与提高必修128例

高效算法:竞赛、应试与提高必修128例 电子书

读者评价

优点:选的这100来道题,算是比较有代表性的算法。还是有眼光的。缺点:里面代码,有些跑不通的
有些code是跑不动的,思路挺好的,也有让我惊呼"竟然还可以这样"的地方。中规中矩吧。
我很生气,第34页经典的KMP算法就是错的...while下面多敲了两个tab把不该放进循环的放进来了...我才刚刚开始看就发现问题了

内容介绍

本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加ACM/ICPC、Google Code Jam等国际编程竞赛、备战编程考试、提高编程效率、优化编程方法的参考书目。

目录

  • 第 1 章 引言 1
  • 1.1 编程竞赛.1
  • 1.1 1 线上学习网站.3
  • 1.1 2 线上裁判的返回值.4
  • 1.2 我们的选择:Python.5
  • 1.3 输入输出.6
  • 1.3 1 读取标准输入.6
  • 1.3 2 显示格式.9
  • 1.4 复杂度.9
  • 1.5 抽象类型和基本数据结构.11
  • 1.5 1 栈.11
  • 1.5 2 字典.12
  • 1.5 3 队列.12
  • 1.5 4 优先级队列和最小堆.13
  • 1.5 5 并查集.16
  • 1.6 技术.18
  • 1.6 1 比较.18
  • 1.6 2 排序.18
  • 1.6 3 扫描.19
  • 1.6 4 贪婪算法.20
  • 1.6 5 动态规划算法.20
  • 1.6 6 用整数编码集合.21
  • 1.6 7 二分查找.23
  • 1.7 建议.25
  • 1.8 走得更远.27
  • 第.2 章 字符串.28
  • 2.1 易位构词.28
  • 2.2 T9:9 个按键上的文字.29
  • 2.3 使用字典树进行拼写纠正.31
  • 2.4 KMP(Knuth-Morris-Pratt)模式匹配算法.33
  • 2.5 最大边的 KMP 算法.35
  • 2.6 字符串的幂.38
  • 2.7 模式匹配算法:Rabin?CKarp 算法.38
  • 2.8 字符串的最长回文子串:Manacher 算法.42
  • 第.3 章 序列.44
  • 3.1 网格中的最短路径.44
  • 3.2 编辑距离(列文斯登距离45
  • 3.3 最长公共子序列.47
  • 3.4 升序最长子序列.49
  • 3.5 两位玩家游戏中的必胜策略.52
  • 第.4 章 数组.53
  • 4.1 合并已排序列表.53
  • 4.2 区间的总和.54
  • 4.3 区间内的重复内容.54
  • 4.4 区间的最大总和.55
  • 4.5 查询区间中的最小值:线段树.55
  • 4.6 计算区间的总和:树状数组(Fenwick 树)57
  • 4.7 有 k 个独立元素的窗口.59
  • 第.5 章 区间.61
  • 5.1 区间树(线段树).61
  • 5.2 区间的并集.64
  • 5.3 区间的覆盖.64
  • 第.6 章 图.66
  • 6.1 使用 Python 对图编码.66
  • 6.2 使用 C 或 Java 对图编码.67
  • 6.3 隐式图.68
  • 6.4 深度优先遍历:深度优先算法.69
  • 6.5 广度优先遍历:广度优先算法.70
  • 6.6 连通分量.71
  • 6.7 双连通分量.74
  • 6.8 拓扑排序.77
  • 6.9 强连通分量.79
  • 6.10 可满足性.84
  • 第.7 章 图中的环.86
  • 7.1 欧拉路径.86
  • 7.2 中国邮差问题.88
  • 7.3 最小长度上的比率权重环:Karp 算法.89
  • 7.4 单位时间成本最小比率环.92
  • 7.5 旅行推销员问题.93
  • 第.8 章 最短路径.94
  • 8.1 组合的属性.94
  • 8.2 权重为 0 或 1 的图.96
  • 8.3 权重为正值或空值的图: Dijkstra 算法.97
  • 8.4 随机权重的图:Bellman-Ford 算法.100
  • 8.5 所有源点 - 目标顶点对:Floyd-Warshall 算法.101
  • 8.6 网格.102
  • 8.7 变种问题.104
  • 8.7 1 无权重图.104
  • 8.7 2 有向无环图.104
  • 8.7 3 最长路径.104
  • 8.7 4 树中的最长路径.104
  • 8.7 5 最小化弧上权重的路径.105
  • 8.7 6 顶点有权重的图.105
  • 8.7 7 令顶点上最大权重最小的路径.105
  • 8.7 8 所有边都属于一条最短路径.105
  • 第.9 章 耦合性和流.106
  • 9.1 二分图最大匹配.107
  • 9.2 最大权重的完美匹配: Kuhn-Munkres 算法.110
  • 9.3 无交叉平面匹配.116
  • 9.4 稳定的婚姻:Gale-Shapley 算法.117
  • 9.5 Ford-Fulkerson 最大流算法.119
  • 9.6 Edmonds-Karp 算法的最大流.121
  • 9.7 Dinic 最大流算法.122
  • 9.8 s-t 最小割.125
  • 9.9 平面图的 s-t 最小割.126
  • 9.10 运输问题.127
  • 9.11 在流和匹配之间化简.127
  • 9.12 偏序的宽度:Dilworth 算法.129
  • 第.10 章 树.132
  • 10.1 哈夫曼编码.133
  • 10.2 最近的共同祖先.135
  • 10.3 树中的最长路径.138
  • 10.4 最小权重生成树:Kruskal 算法.140
  • 第.11 章 集合.142
  • 11.1 背包问题.142
  • 11.2 找零问题.143
  • 11.3 给定总和值的子集.145
  • 11.4 k 个整数之和.146
  • 第.12 章 点和多边形.148
  • 12.1 凸包问题.149
  • 12.2 多边形的测量.150
  • 12.3 最近点对.151
  • 12.4 简单直线多边形.153
  • 第.13 章 长方形.156
  • 13.1 组成长方形.156
  • 13.2 网格中的最大正方形.157
  • 13.3 直方图中的最大长方形.158
  • 13.4 网格中的最大长方形.159
  • 13.5 合并长方形.160
  • 13.6 不相交长方形的合并.164
  • 第.14 章 计算.165
  • 14.1 最大公约数.165
  • 14.2 贝祖等式.165
  • 14.3 二项式系数.166
  • 14.4 快速求幂.167
  • 14.5 素数.167
  • 14.6 计算算数表达式.168
  • 14.7 线性方程组.170
  • 14.8 矩阵序列相乘.174
  • 第.15 章 穷举.176
  • 15.1 激光路径.176
  • 15.2 精确覆盖.179
  • 15.3 数独.184
  • 15.4 排列枚举.186
  • 15.5 正确计算.188
  • 调试工具.191
  • 参考文献.192

资源下载

资源下载地址1:https://pan.baidu.com/s/1GE3fM25x6t01agZUBXDwWA

相关资源

网友留言

网友NO.47679
龚开宇

考虑以下在树上行走的随机过程: 1. 起始位置在根节点。 2. 如果现在位置在任何一个叶节点 (leaf node) 上,则结束。 3. 令现在所在的节点通往子节点i的边为 ei,其权重为 vi。 4. 定义 P(ei) 为选择到边 ei 的概率,以 P(ei)=vi/(2×105) 的概率分布随机选择一条边,移动至对应的子节点。 5. 跳至第 2. 步骤。 接下来我们定义以下的操作: 1. 选定一个非叶节点 2. 将这个节点所有通往子节点的边的权重随意重新排序,亦即可以无限次地交换彼此之间的权重,但不能改变权重的大小。 给定一个固定的 X 值,请对于每个叶节点分开考虑以下问题: 如果能进行至多 X 次的操作,那到达这个叶节点的概率最大可以多大呢?

网友NO.30637
苏乐邦

使用大O符号来衡量算法效率 大O符号标记可以基于输入的大小得到一种衡量算法时间复杂度的函数。可以忽略函数中的倍乘常量和非主导项。其本质是比较算法之间的增长率。对于一个线性查找的算法,其时间复杂度表示方法为O(n),读作“n阶”。 - 最佳情况输入:导致最短执行时间的输入 - 最差情况输入:导致最长执行时间的输入,可以确定算法不会比最差情况还慢 分析通常针对最坏情况进行。大O符号允许忽略非主导部分(例如,表达式n-1中的-1),并强调重要部分(例如,表达式n-1中的n),因此,该算法的复杂度为O(n)。如果执行时间与输入规模无关就称该算法耗费了常量时间,用符号O(1)表示。