出版时间:2009-7 出版社:清华大学出版社 作者:斯基纳 页数:302 译者:刘汝佳
Tag标签:无
前言
不管对初出茅庐的新人还是身经百战的老手,用“挑战”一词形容程序设计竞赛是再合适不过的了。酷爱编程的人们往往喜欢挑战,但大多数程序员对各种程序设计竞赛却是“敬而远之”,为什么会这样呢?原因在于,学习编程语言和软件开发的知识只是接受这些挑战的必要而非充分条件。要想在程序设计竞赛中脱颖而出,还需要更多的知识和技能。而这些知识和技能,却是很难在传统的课堂和教科书中学到的。本书的目标读者便是那些已经具备初步的编程技能,对程序设计竞赛充满好奇,希望有机会武装自己、接受编程挑战的人,以及他们的老师和教练(甚至父母)。即使不参加任何竞赛,从本书的编程挑战中学到的东西,也会对程序员的职业生涯产生重要影响,更不用说这些挑战本身就是充满乐趣、引人入胜的。本书文字精练、通俗易懂。尽管每一章都涉及一个不同的领域,但篇幅却短得甚至可以一口气读完。另外,所有题目均附有难度、流行度等客观评价系数,并可以在线提交。写出程序并不意味着完善的解决了难题,只有通过了评测系统的严格把关才能让人信服。全书由刘汝佳主译,并得到王希、杨锐、尹淳兴、邱前皓等的大力协助。感谢两位作者算法大师Steven s.Skiena教授和在线评测系统uVaOJ的创立者Miguel A.Revilla教授邀请译者完成本书的翻译工作,提供了书的源程序和插图,并讨论书中的一些细节;感谢清华大学出版社的龙放铭编辑,他对工作认真负责的态度和严谨的科学作风令人钦佩。尽管我们付出了许多努力,但译文中难免有翻译不当之处,敬请批评指正。
内容概要
本书分为14章,分别介绍在线评测系统的基本使用方法、数据结构、字符串、排序、算术与代数、组合数学、数论、回溯法、图遍历、图算法、动态规划、网格、几何,以及计算几何,并在附录中介绍了一些著名的程序设计竞赛以及相应的备赛建议与比赛技巧。每章的正文用十余页的篇幅覆盖了该领域最核心的概念和算法,然后给出八道可在线提交的完整编程挑战题目供读者练习。 全书内容紧凑、信息量大,是各类程序设计竞赛的选手与教练不可多得的参考书。
作者简介
Steven S.Skiena是美国Stony Brook大学计算机教授,研究方向包括图、串和几何算法的设计和应用(尤其是生物方面)。
他曾获ONR青年研究员奖和IEEE计算机科学与工程本科教学奖,并著有四本书籍,包括“The Algorithm Design Manual”和“Calculated Bets:Computers,Gambl
书籍目录
译者序前言第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) ……第4章 排序第5章 算术与代数第6章 组合数学第7章 数论第8章 回溯法第9章 图遍历第10章 图算法第11章 动态规划第12章 网格第13章 几何第14章 计算几何附录A参考文献
章节摘录
插图:第2章数据结构数据结构是复杂算法的核心。数据结构的选择会对算法实现的复杂性产生巨大的影响。选择了正确的数据结构,编程会十分容易;选择了错误的数据结构,则需要大量的时间和代码量作为决策失误的代价。在本章中,你将复习到一些每个程序员都应熟悉的基础数据结构。我们将以一个孩子们喜欢的扑克牌游戏作为背景展开讨论。很多经典的编程题目都是以游戏为背景的。几乎所有人在初学编程的课程中都会接触到汉诺塔(HanoiTower)、骑士周游、八皇后这样的游戏。2.1 基本数据结构我们首先介绍栈(stack)、队列(queue)、字典(dictionaries)、优先队列(priorityqueues)、集合(sets)等最重要的数据结构的抽象操作(abstractoperations),接下来简单描述从头实现这些操作的最简单的方法。请注意,c++和Java这样的现代面向对象程序设计语言都已经在它们的标准库中实现了基础数据结构。我们将在2.2 节中简单地介绍它们。每个程序员都应该花一些时间来熟悉这些数据结构,而不是每次都从头实现。当你很好地熟悉了这些库的使用方法后,在阅读本节时便可专注于这些数据结构所擅长的领域而非实现细节。
编辑推荐
《挑战编程:程序设计竞赛训练手册》是由清华大学出版社出版的。
图书封面
图书标签Tags
无
评论、评分、阅读与下载