商家名称 | 信用等级 | 购买信息 | 订购本书 |
![]() |
挑战编程:程序设计竞赛训练手册 [平装] | ![]() |
|
![]() |
挑战编程:程序设计竞赛训练手册 [平装] | ![]() |
《挑战编程:程序设计竞赛训练手册》是由清华大学出版社出版的。
作者:(美国)斯基纳 (Sterven S.Skiena) 译者:刘汝佳
Steven S.Skiena是美国Stony Brook大学计算机教授,研究方向包括图、串和几何算法的设计和应用(尤其是生物方面)。他曾获ONR青年研究员奖和IEEE计算机科学与工程本科教学奖,并著有四本书籍,包括“The Algorithm Design Manual”和“Calculated Bets:Computers,Gambling,andMathematical Modeling to Win”。 Miguel A.Revilla是西班牙Valladolid大学应用数学与算法教授。他是ACM/ICPC官方网站的资料整理者,创立并维护着全球最权威的在线评测与网络比赛系统。他涉足ICPC十余年,如今已是ACM国际指导委员会成员。2005年,他荣获Joseph S.DeBlasi杰出贡献奖。目前,他是EduJudge项目在Valladolid大学的领导者,致力于把在线评测系统用于有效的电子学习中。
译者序
前言
第1章 入门
1.1 初识自动评测系统
1.1.1 评测系统反馈
1.2 挑选你的武器
1.2.1 程序设计语言
1.2.2 如何阅读本书的程序
1.2.3 标准输入输出
1.3 编程提示
1.4 基本数据类型
1.5 关于习题
1.6 习题
1.6.1 3n+1问题(3n+l Problem)
1.6.2 扫雷(Minesweeper)
1.6.3 旅行(The Trip)
1.6.4 液晶显示屏(LC~Display)
1.6.5 图形化编辑器(Graphical Editor)
1.6.6 解释器(Interpreter)
1.6.7 将军fCheck the Checkl
1.6.8 澳大利亚投票(Australian Voting)
1.7 提示
1.8 注解
第2章 数据结构
2.1 基本数据结构
2.1.1 栈
2.1.2 队列
2.1.3 字典
2.1.4 优先队列
2.1.5 集合
2.2 库函数
2.2.1 C++标准模板库
2.3 程序设计实例:纸牌大战
2.4 准备行动
2.5 字符串输入输出
2.6 赢得战争
2.7 测试与调试
2.8 习题
2.8.1 快乐的跳跃者(Jolly Jumper)
2.8.2 扑克牌型(Poker Hands)
2.8.3 罢工(Hartals)
2.8.4 解密(Crypt Kicker)
2.8.5 完美洗牌术(Stack’em Up)
2.8.6 ErdSs数(ErdSs Numbersl
2.8.7 比赛记分板(Contest Scoreboard)
2.8.8 Yahtzee游戏(Yahtzee)
2.9 习题
2.10 注解
第3章 字符串
3.1 字符编码
3.2 字符串的表示
3.3 程序设计实例:公司更名
3.4 模式查找
3.5 字符串操作
3.6 程序的完成
3.7 字符串库函数
3.8 习题
3.8.1 WERTYU键盘fWERTYU)
3.8.2 寻找单词(Where’s Waldorf?)
3.8.3 公共排列(Common Permutation)
3.8.4 解密II(Crypt Kicker II)
3.8.5 自动评测脚本(Automated Judge Script)
3.8.6 文件碎片(File Fragmentation)
3.8.7 Doublet序列fDoublets)
3.8.8 Fmt程序(Fmt)
3.9 提示
3.10 注解
第4章 排序
4.1 排序的应用
4.2 排序算法
4.3 程序设计举例:给绅士排名
4.4 与排序相关的库函数
4.5 给绅士排名
4.6 习题
4.6.1 vito家族(Vito’s Family)
4.6.2 煎饼堆(Stacks of Flapjacks)
4.6.3 过桥(Bridge)
4.6.4 最长打盹时间(Longest.Nap)
4.6.5 鞋匠的烦恼(Shoemaker’s Probleml
4.6.6 CDVII高速公路(CDVIl)
4.6.7 龟壳排序(ShellSort)
4.6.8 足球(Fhotball(aka Soccer))
4.7 提示
4.8 注解
第5章 算术与代数
5.1 机器算术
5.1.1 整数库函数
5.2 高精度整数
5.3 高精度算术
5.4 进制及其转换、
5.5 实数
5.5.1 如何处理实数
5.5.2 分数
5.5.3 十进制实数
5.6 代数
5.6.1 多项式运算
5.6.2 多项式求根
5.7 对数
5.8 实数函数库
5.9 习题
5.9.1 小学生算术(Primary Arithmetic)
5.9.2 反转相加(Reverse and Add)
5.9.3 考古学家的烦恼(The Archeologist’S Dilemma)
5.9.4 仅由1组成的数(Ones)
5.9.5 乘法游戏(A Multiplication Game)
5.9.6 多项式的系数(Polynomial Coefficiets)
5.9.7 Stern-Brocot代数系统(The Stern-Brocot Number System)
5.9.8 两两之和(Pairsumonious Numbers)
5.10 提示
5.11 注解
第6章 组合数学
6.1 基本计数技巧
6.2 递推关系
6.3 二项式系数
6.4 其他计数序列
6.5 递归与数学归纳法
6.6 习题
6.6.1 斐波那契计数(How Many Fibs?)
6.6.2 土地分割(How Many Pieces of Land?)
6.6.3 数数(Counting)
6.6.4 括号表达式(Expressions)
6.6.5 完全树标号(Complete Tree Labeling)
6.6.6 牧师数学家fThe Priest Mathematician)
6.6.7 自描述序列(Self-describing Sequence)
6.6.8 数轴行走(Steps)
6.7 提示
6.8 注解
第7章 数论
7.1 素数
7.1.1 寻找素数
7.1.2 素数的个数
7.2 整除性
7.2.1 最大公约数
7.2.2 最小公倍数
第8章 回溯法
第9章 图遍历
第10章 图算法
第11章 动态规划
第12章 网格
第13章 几何
第14章 计算几何
附录A
参考文献
不管对初出茅庐的新人还是身经百战的老手,用“挑战”一词形容程序设计竞赛是再合适不过的了。酷爱编程的人们往往喜欢挑战,但大多数程序员对各种程序设计竞赛却是“敬而远之”,为什么会这样呢?原因在于,学习编程语言和软件开发的知识只是接受这些挑战的必要而非充分条件。要想在程序设计竞赛中脱颖而出,还需要更多的知识和技能。而这些知识和技能,却是很难在传统的课堂和教科书中学到的。
本书的目标读者便是那些已经具备初步的编程技能,对程序设计竞赛充满好奇,希望有机会武装自己、接受编程挑战的人,以及他们的老师和教练(甚至父母)。即使不参加任何竞赛,从本书的编程挑战中学到的东西,也会对程序员的职业生涯产生重要影响,更不用说这些挑战本身就是充满乐趣、引人入胜的。
本书文字精练、通俗易懂。尽管每一章都涉及一个不同的领域,但篇幅却短得甚至可以一口气读完。另外,所有题目均附有难度、流行度等客观评价系数,并可以在线提交。写出程序并不意味着完善的解决了难题,只有通过了评测系统的严格把关才能让人信服。
全书由刘汝佳主译,并得到王希、杨锐、尹淳兴、邱前皓等的大力协助。感谢两位作者算法大师Steven s.Skiena教授和在线评测系统uVaOJ的创立者Miguel A.Revilla教授邀请译者完成本书的翻译工作,提供了书的源程序和插图,并讨论书中的一些细节;感谢清华大学出版社的龙放铭编辑,他对工作认真负责的态度和严谨的科学作风令人钦佩。尽管我们付出了许多努力,但译文中难免有翻译不当之处,敬请批评指正。
插图:
第2章数据结构
数据结构是复杂算法的核心。数据结构的选择会对算法实现的复杂性产生巨大的影响。选择了正确的数据结构,编程会十分容易;选择了错误的数据结构,则需要大量的时间和代码量作为决策失误的代价。
在本章中,你将复习到一些每个程序员都应熟悉的基础数据结构。我们将以一个孩子们喜欢的扑克牌游戏作为背景展开讨论。很多经典的编程题目都是以游戏为背景的。几乎所有人在初学编程的课程中都会接触到汉诺塔(HanoiTower)、骑士周游、八皇后这样的游戏。
2.1 基本数据结构
我们首先介绍栈(stack)、队列(queue)、字典(dictionaries)、优先队列(priorityqueues)、集合(sets)等最重要的数据结构的抽象操作(abstractoperations),接下来简单描述从头实现这些操作的最简单的方法。
请注意,c++和Java这样的现代面向对象程序设计语言都已经在它们的标准库中实现了基础数据结构。我们将在2.2 节中简单地介绍它们。每个程序员都应该花一些时间来熟悉这些数据结构,而不是每次都从头实现。当你很好地熟悉了这些库的使用方法后,在阅读本节时便可专注于这些数据结构所擅长的领域而非实现细节。
喜欢挑战编程:程序设计竞赛训练手册 [平装]请与您的朋友分享,由于版权原因,读书人网不提供图书下载服务