本书每章为一个主题,实验内容安排紧扣大学算法和数学的教学,用程序设计竞赛中的算法和数学试题作为实验试题,将算法和数学的教学与程序设计竞赛的解题训练结合在一起;在思维方式和解题策略的训练方面,以问题驱动和启发式引导为主要方式,培养读者通过编程解决问题的能力。
本书特点:
书中给出的234道试题全部精选自ACM国际大学生程序设计竞赛的世界总决赛以及各大洲赛区现场赛和网络预赛、大学程序设计竞赛、在线比赛和其他诸如IOI等程序设计竞赛题目,时间跨度为1989年到2010年,这些试题均能通过在线提交的方式进行实时检验,从而方便读者进行实验和练习。
本书提供了官方的原版试题、测试数据和解答程序作为参考,读者可以通过对官方的测试数据的分析,了解测试数据的特点和常见陷阱,在以后的编程中提高解题质量和正确性。
各章的实验范例可以用于大学算法课程的教学与实验,在此基础上使用题库进行解题,还可以辅导学生进行程序设计竞赛的专项训练。
本书提供了试题的英文原版描述和大部分试题的测试数据,读者可登录华章网站(http://www.hzbook.com)下载。
前言
第1章 求解Ad Hoc类问题的编程实验1
1.1 机理分析法的实验范例1
1.2 统计分析法的实验范例5
1.3 相关题库10
第2章 模拟法的编程实验35
2.1 直叙式模拟的实验范例36
2.2 筛选法模拟的实验范例44
2.3 构造法模拟的实验范例51
2.4 相关题库55
第3章 数论的编程实验69
3.1 素数运算的实验范例69
3.1.1 使用筛法生成素数的实验范例69
3.1.2 测试大素数的实验范例76
3.2 求解不定方程和同余方程的实验范例81
3.2.1 计算最大公约数和不定方程81
3.2.2 计算同余方程和同余方程组85
3.3 积性函数的实验范例91
3.3.1 使用欧拉函数φ(n)计算与n互质的正整数个数 92
3.3.2 使用莫比乌斯函数μ(n)计算非平方数n的质因子个数97
3.4 相关题库102
第4章 组合分析的编程实验118
4.1 生成排列组合的实验范例118
4.1.1 按字典序思想生成下一排列组合118
4.1.2 按字典序思想生成所有的排列组合121
4.2 排列组合计数的实验范例122
4.2.1 一般的排列组合计数公式123
4.2.2 两种特殊的排列组合计数公式126
4.3 容斥原理与抽屉原理的实验范例132
4.3.1 利用抽屉原理求解存在性问题132
4.3.2 利用容斥原理对并集计数134
4.4 波利亚定理的实验范例140
4.4.1 波利亚定理的概念基础141
4.4.2 利用波利亚定理计算集合在置换群作用下产生的等价类个数148
4.5 相关题库157
第5章 贪心法的编程实验165
5.1 体验贪心法内涵的实验范例165
5.2 利用数据有序化进行贪心选择的实验范例172
5.3 在综合性的P类问题中使用贪心法的实验范例181
5.4 相关题库187
第6章 动态规划(DP)方法的编程实验197
6.1 线性DP的实验范例198
6.1.1 初步体验线性DP问题198
6.1.2 子集和问题202
6.1.3 最长公共子序列问题203
6.1.4 最长递增子序列问题206
6.2 树形DP的实验范例213
6.3 状态压缩DP的实验范例218
6.4 单调优化1D/1D DP的实验范例224
6.4.1 经典模型1:利用决策代价函数w的单调性优化224
6.4.2 经典模型2:利用决策区间下界的单调性优化228
6.4.3 经典模型3:利用最优决策点的凸性优化233
6.5 相关题库236
第7章 高级数据结构的编程实验273
7.1 后缀数组的实验范例273
7.1.1 使用倍增算法计算名次数组和后缀数组273
7.1.2 计算最长公共前缀276
7.1.3 后缀数组的应用278
7.2 线段树的实验范例288
7.2.1 线段树的基本概念和基本操作288
7.2.2 线段树单点更新的维护290
7.2.3 线段树子区间更新的维护293
7.3 处理特殊图的实验范例306
7.3.1 计算欧拉图306
7.3.2 计算哈密尔顿图314
7.3.3 计算最大独立集324
7.3.4 计算割点、桥和双连通分支327
7.4 相关题库336
第8章 计算几何的编程实验354
8.1 点线面运算的实验范例354
8.1.1 计算点积和叉积354
8.1.2 计算线段交361
8.1.3 利用欧拉公式计算多面体371
8.2 利用扫描线算法计算矩形的面积并375
8.2.1 沿垂直方向计算矩形的面积并375
8.2.2 沿水平方向计算矩形的面积并380
8.3 计算半平面交的实验范例383
8.3.1 计算半平面交的联机算法384
8.3.2 利用极角计算半平面交的算法390
8.4 计算凸包和旋转卡壳的实验范例398
8.4.1 计算凸包399
8.4.2 旋转卡壳实验403
8.5 相关题库408
本书收集了作者在试验心理学这一研究领域发表过的五篇最著名的论文以及其他若干论文。每篇旧论文后面都有作者的后记,回顾该文发
《半小时漫画股票实战法》内容简介:任何一个可以在股市稳定盈利的人,背后都有一套自己的交易系统。本书漫画主角王老师是个基层职
这是一本为网页设计师量身定制的配色方案专业书籍。全书共分七个部分,分别结合丰富的实例讲述了配色基础知识、色相和色调(Hue&
耸立在这里的500帧生活·读书·新知三联书店出版物的书衣,是从人民出版社和三联书店资料室的书库里,查找并拍摄的两千余件书影中
《智能制造基础共性标准研究成果(三)》内容简介:2015年开始,工业和信息化部与财政部共同实施了“智能制造综合标准化与新模式应
LearnhowtouseRxJavaanditsreactiveObservablestobuildfast,concurrent,andpowerfulap...
网络操作系统Linux管理与配置 本书特色 陈志涛主编的《网络操作系统Linux管理与配置》是21世纪高职高专IT类专业系列教材之一。教材内容贯彻“工学结合”指...
《RubyonRails社区网站开发》全面探讨创建完整社区网站的开发过程。首先介绍开发一个内容简单的管理系统,之后逐渐添加新特性,以
《多核应用编程实战》是一本全面实用的多核应用编程指南,旨在介绍如何编写功能正确、性能优越且适合扩展为在多个CPU核心的系统运
ThisbookprovidesacompletereferencefortheC++programminglanguage.ItconsistsoftheC+...
《科第冠海内,人文甲天下》内容简介:《科第冠海内,人文甲天下:明清江南文化研究》是南京大学历史学院范金民教授在江南文化研究
《译前译后》内容简介:《译前译后》主要涉及到笔者多年来翻译并出版过的作品。译前,系译者对原著的认识。译后,这里包括译著的成
别样诠释——一个VisualC++老鸟10年学习与开发心得 本书特色 《别样诠释:一个visual c++老鸟10年学习与开发心得》着眼于实际应用,循序渐进地介...
《金融激荡300年》内容简介:本书从经济学角度解读历史和政治,追溯300年金融激荡的进程,解读金融的力量,回答金融的走向,是一本
《Arduino创意机器人入门》内容简介:机器人教育融机械、传感与控制等内容为一体,让学生在手脑并用解决实际问题的过程中,有效地提
MATLAB 优化算法案例分析与应用 本书特色 本书全面而系统地介绍了matlab算法和案例应用,涉及面广,从基本操作到高级算法应用,几乎涵盖matlab算法的...
《先行者:未来新经济的探索》内容简介:本书探讨了新经济在成都的前世今生。通过跟70+创业者、企业高管、投资人、科研工作者对话,
《知道点世界哲学》内容简介:是谁提出“人不能两次踏进同一条河流”?为什么斯宾诺莎是被骂名包围的哲学家?俄罗斯的飞翔的双头鹰
本书是著名作者WilliamStallings力作之一,以无线连网为主题,以无线通信与连网的技术和标准为重点,讲述了连网技术与体系结构、
《图表解设备全过程规范管理手册》内容简介:本书以设备全过程规范管理为主题,对设备前期管理和使用期管理的实践操作进行了系统描