高级搜索  |  搜索帮助
最近的浏览历史
购买此书的人还购买过
书  名:可视化计算
  • 作  者: 程向前、陈建明
  • 出版时间: 2013-01-01
  • 出 版 社: 清华大学出版社
  • 字  数: 569 千字
  • 印  次: 1-1
  • 印  张: 23
  • 开  本: 16开
  • ISBN: 9787302304739
  • 装  帧: 平装
  • 定  价:¥39.00
电子书价:¥27.30 折扣:70折 节省:¥11.70 vip价:¥27.30 电子书大小:23.5M
配套资源下载:
  • 名称
  • 说明
  • 权限
  • 文件大小
  • 点击图标下载
  • 图书样章
  • 所有用户
  • 256K
  • 图书课件
  • 教师
  • 47M
  • 网络资源
  • 教师
共有商品评论0条 查看评论摘要
内容简介
  本书系统地介绍了使用计算思维进行计算问题求解的核心理念,全书由8章组成,主要内容包括程序设计基础、算法分析要点、基本算法与策略、计算与数据模型、具有数据结构特色的算法以及计算工具的选择和评估。本书以最终用户开发为前提,着重阐述使用计算机科学的基本概念与方法设计计算过程,并充分利用软件工具的特点做到算法设计、运算过程和计算结果的可视化,使用估算和实验方法来分析和验证算法实现的效率。本书的算法设计采用了基于流程图的算法原型设计工具RAPTOR,附录介绍了RAPTOR的图形操作。
  本书可以作为高校非计算机专业的主要介绍计算思维或计算原理的计算机基础类课程的教材,也可以作为非计算机专业的程序设计、数据结构和离散数学等课程的入门参考书。
前言
  本书是一个新的计算机教育时代的产物,计算思维就是这个时代的名称。一般认为科学思维主要分为理论思维、实验思维和计算思维三大类,所以理论、实验和计算成为推动人类文明进步和科技发展的三大支柱。而计算思维的主要内容则包括了问题求解、系统设计和人类行为理解。
  在高等院校的计算机教育领域,一直存在两种截然不同的教材: 一种是面向计算机和信息专业领域的,众多成熟和系统性很强的教材并形成学科教育的基础;另一种则是面向所有专业的计算机基础教材,由于其中的内容大部分是面向计算机基本应用的,所以技术选择对平台工具具有一定的依赖性,而且随着技术的变换而不断变化。
  由于计算机与网络技术的迅猛发展,技术和平台工具选择的相互依赖会导致大部分专业工作者在学校所接触到的信息技术和产品不久就成为“明日黄花”并为更新的技术和产品所替代,甚至一种计算工具尚未完全掌握,新一代的工具又产生了。这种状况往往令人目不暇接,以至于无所适从。另一方面,计算机科学的基础内容,那些在计算机科学课程系列中被认为极为重要的核心理念和基本方法,虽然变化缓慢,但由于其枯燥艰深,难以为广大的其他专业工作者所了解和掌握。
  在这个新的计算机教育时代,大学计算机课程的重要任务之一是让学习者体验到计算原理的相互影响以及问题有效解决的思维方式,并从中获得计算的愉悦。
  本书的目的就是朝着这个方向努力。希望在有限的时间里,将计算机科学的核心理念传播给非计算机专业的读者,并且,希望这些理念是可以观察、验证和投入实际应用的--即使这种应用水平还属于初级阶段,可能存在很多需要改进的地方。
  鉴于目前大部分高校学生具备的计算机和信息应用技术和认知基础,本书的重点放在以下方面。
  (1) 程序设计基础: 本书对读者的程序设计知识的要求为“零起点”,而介绍算法显然离不开最基本的程序设计概念。但本书的主旨并不是介绍程序设计,所以程序设计语言的选择和应用采用了不同于以往传统教材的做法,目的是用最短的时间让读者掌握一种可以进行算法讨论的程序设计工具。这部分内容包含在第1、2章中。
  (2) 算法分析要点: 算法是计算机科学的精髓,也是本书所强调的核心内容。算法分析的要点是通过理论估算和实验验证两种方式,比较算法设计的时间和空间复杂性;让读者熟悉和了解在计算机科学中算法设计普遍应用的“空间换时间”的基本原则。这部分出现在第2章。
  (3) 基本算法与策略: 与高校学生的计算机与信息基础结合,进行常用基本算法的介绍,让读者可以直观地感受使用计算机进行问题求解的魅力,并养成分析问题和选择算法的习惯;而基本策略的引入则是计算思维的直接体现,可以让读者感受计算机科学中应用人类传统智慧的一些基本原则,并形成计算策略应用的基本规律。这部分内容包含在第3章中。
  (4) 计算与数据模型: 模型化的思想是科技发展的重要手段,这部分内容主要考虑两个方面: 一是以图灵机为核心的计算理论的引入和验证,为读者提供有限状态机算法设计的基本训练;二是开始引入抽象数据类型,因为计算科学的两个核心概念--抽象和自动化都涉及基础理论和应用实现。这部分内容出现在第4章。
  (5) 具有数据结构特色的算法: 内容包括在第5~7章中,每一章的内容都与某种抽象数据类型相关,是本书实践计算思维教学的问题求解部分内容最为集中的部分,具有较强的实践性和应用价值。
  (6) 计算工具的选择和评估: 计算思维必定受到人和计算工具的能力限制。这部分介绍计算工具的选择原则和评估方法,以便读者明确认识计算工具的限制和最大限度地利用计算工具本身的能力,这也是本书的特殊视角的反映。由于作为算法评估工具的可视化程序设计语言除了进行算法原型的设计和分析之外,也可以将算法设计的结果转换成为其他的程序设计语言。这样,除了能够完成基本的算法功能外,符合应用需求的程序和计算环境就有了选择的必要。这部分内容出现在第8章。
  本书可以作为一门类似于“大学计算机”性质课程的基础教材,供大学本科一、二年级的学生使用。同时也可以作为程序设计、数据结构和离散数学等课程的入门参考书。
  作者谨向全体参与以“计算思维”为切入点的大学计算机课程和教学改革的同行致以敬意。采用一种全新的视角来开展这类课程的教学,不仅需要辛勤的付出和投入,而且需要具备挑战未知领域的勇气和魄力。
  经过两年多的准备和实践,作者发现这种付出是非常值得的--当学生拿着自选专题的算法大作业,同教师和同学进行交流的时候,你会突然发现,在学期开始时甚至不知道分支、循环为何物的学生,到了期末已经可以与他人讨论非常专业的算法问题了。这是大学计算机基础课教师所追求的最高境界和所能获得的最好奖励。
  在本书编写过程中,得到了国内外专家学者以及我们的学生的帮助,在此谨致谢意。
  西安交通大学计算机教学实验中心主任、全国首届教学名师冯博琴教授在作者任教的单位中倡导开展以“计算思维”为切入点的新一轮大学计算机课程教学改革,并亲自推动了少年班“计算概论”、“大学计算机基础”的课程改革实验,使得作者有机会进行改革方案的创新和实践。
  可视化程序设计工具RAPTOR的主创者之一Martin C.Carlisle博士,对作者提出的对该工具的设计改进做出了详尽和积极的答复。
  西安交通大学李仁厚教授、黄尚恒教授、吴裕远教授评审了采用本书作为教材的校级选修课的大纲,并建议修改课程名称,本教材最后成书时也采用了该课程修改后的名称。
  感谢上海交通大学过敏意教授、福州大学陈国龙教授、重庆邮电大学王国胤教授、西安交通大学邓建国教授、广东工业大学程良伦教授、湖南大学李仁发教授、桂林电子科技大学董荣胜教授、华南师范大学叶惠文教授、成都理工大学孙淑霞教授、深圳大学王志强教授、肇庆学院胡忠望教授、华东理工大学陈志华副教授针对本书所提出的建设性意见和建议。
  特别感谢西安交通大学周梦远同学、西安电子科技大学薛飞洁同学为本书中的程序样例的设计与调试提供了重要的帮助以及西安交通大学少年103班、少年104班全体同学为“计算概论”课程的算法设计大作业所付出的努力。
  感谢清华大学出版社焦虹主任和张民编辑对本书立项和出版所做的努力。
  对于本书存在的缺陷和不足,作者诚恳地期望各位同行和读者赐教。

  作者 2012年11月于西安交通大学
目录
第1章 RAPTOR程序设计基础1
1.1 程序与算法的基本概念1
1.1.1 为什么要学习程序设计1
1.1.2 程序设计的发展阶段2
1.1.3 为什么要使用RAPTOR可视化程序设计环境6
1.1.4 程序设计语言的基本概念8
1.1.5 RAPTOR的特点10
1.2 RAPTOR基本程序环境10
1.2.1 基本符号10
1.2.2 变量11
1.2.3 常量15
1.2.4 输入语句15
1.2.5 数据处理语句16
1.2.6 过程调用语句19
1.2.7 输出语句20
1.2.8 注释21
1.3 RAPTOR控制结构23
1.3.1 顺序控制23
1.3.2 选择控制23
1.3.3 决策表达式24
1.3.4 循环控制27
1.4 RAPTOR数组变量31
1.4.1 一维数组的创建32
1.4.2 二维数组的创建33
1.4.3 数组的运算34
1.4.4 如何使用数组变量34
1.4.5 平行数组35
1.4.6 数组应用中的注意事项35
1.5 RAPTOR子程序和子图的定义及调用35
1.6 计算问题求解的一般过程40
1.6.1 理解问题40
1.6.2 制定计划41
1.6.3 执行计划42
1.6.4 回顾与总结42
1.6.5 使用计算机进行问题求解: 程序开发周期43
1.7 小结与回顾44
习题44
第2章 算法设计与可视化46
2.1 算法初步46
2.1.1 算法的由来与定义46
2.1.2 算法的特性49
2.1.3 算法设计的要求49
2.2 算法效率的度量51
2.2.1 算法效率的基本估算方法51
2.2.2 实验验证方法53
2.3 算法复杂度53
2.3.1 函数的渐近增长54
2.3.2 算法时间复杂度定义54
2.3.3 推算大O阶方法55
2.4 计算的可视化问题57
2.4.1 算法设计的可视化57
2.4.2 计算过程的可视化58
2.4.3 计算问题和结果的可视化60
2.4.4 RAPTOR与流程图规范之间的关系与差别61
2.5 RAPTOR算法设计常用子程序63
2.5.1 随机数的产生与存储63
2.5.2 将计算结果存储到文件64
2.5.3 从文件中读入基础数据65
2.5.4 RAPTOR图形输出67
2.5.5 RAPTOR图形窗口中的用户交互74
2.5.6 图形输出案例: 随机漫步的模拟模型75
2.6 小结与回顾81
习题81
第3章 基本算法和策略83
3.1 基本算法83
3.1.1 蛮力法83
3.1.2 分段函数84
3.1.3 递推法86
3.1.4 模运算89
3.1.5 字符和字符串运算89
3.1.6 递归93
3.1.7 数论问题98
3.1.8 组合计算102
3.1.9 迭代法105
3.2 基本策略108
3.2.1 贪心策略108
3.2.2 分治策略110
3.2.3 回溯策略111
3.2.4 动态规划114
3.2.5 将递归算法转化为非递归的实现117
3.2.6 基本算法策略的讨论119
3.3 小结与回顾121
习题121
第4章 模型化124
4.1 从有限状态机到图灵机124
4.1.1 什么是模型125
4.1.2 如何建立模型126
4.1.3 什么是有限状态机126
4.1.4 如何设计和应用有限状态机129
4.1.5 可视化有限状态机的实现案例: 电子宠物游戏130
4.1.6 什么是图灵机136
4.1.7 如何使用RAPTOR模拟图灵机139
4.1.8 有限状态机与图灵机的比较148
4.2 使用RAPTOR实现抽象数据类型149
4.2.1 对现实世界中的问题进行数据抽象149
4.2.2 使用RAPTOR实现线性表151
4.2.3 使用RAPTOR实现树155
4.3 小结与回顾164
习题164
第5章 排序与查找166
5.1 排序166
5.1.1 计算机如何进行排序167
5.1.2 直接插入排序169
5.1.3 桶排序172
5.1.4 冒泡排序172
5.1.5 快速排序176
5.1.6 归并排序178
5.1.7 排序算法的分析178
5.2 查找180
5.2.1 顺序查找180
5.2.2 二分查找181
5.2.3 分块查找182
5.2.4 哈希查找188
5.2.5 查找算法的分析198
5.3 小结与回顾199
习题199
第6章 信息论、哈夫曼编码与二叉树201
6.1 问题的引入201
6.1.1 信息表达203
6.1.2 数字表达204
6.1.3 字符表达205
6.2 信息论基础207
6.2.1 什么是信息207
6.2.2 信息的量化208
6.3 哈夫曼编码212
6.3.1 哈夫曼编码原理213
6.3.2 使用RAPTOR实现哈夫曼编码的算法215
6.4 二叉树220
6.4.1 二叉树的遍历224
6.4.2 堆排序227
6.4.3 二叉搜索树228
6.4.4 平衡二叉树236
6.5 小结和回顾240
习题241
第7章 图论基础与应用243
7.1 图的定义和常用术语244
7.2 图的存储246
7.2.1 邻接矩阵存储原理246
7.2.2 使用RAPTOR建立已知图的邻接矩阵248
7.2.3 邻接表存储原理249
7.2.4 使用RAPTOR建立已知图的邻接表252
7.3 图的遍历253
7.3.1 深度优先搜索254
7.3.2 广度优先搜索255
7.3.3 求图的连通分量 256
7.4 图算法的应用258
7.4.1 最小网络建设成本258
7.4.2 最短的旅行路线260
7.4.3 地图着色问题266
7.4.4 商业网点的最省布点方案269
7.5 在RAPTOR中实现图算法的可视化271
7.5.1 图类算法的问题可视化271
7.5.2 真实的地图与抽象图的叠加274
7.5.3 棋类游戏的实现276
7.6 小结与回顾279
习题279
第8章 计算工具的评估和选择281
8.1 计算工具的精度评估281
8.1.1 误差的来源282
8.1.2 绝对误差、相对误差和有效数字283
8.1.3 计算工具的精度设计与误差284
8.1.4 误差分析与实践289
8.2 从RAPTOR到C++的算法环境转换290
8.2.1 递归程序290
8.2.2 文件输入输出292
8.2.3 图形问题294
8.2.4 RAPTOR的转换和编译问题297
8.2.5 RAPTOR与C/C++的比较与选择300
8.3 面向对象的程序设计与RAPTOR303
8.3.1 OOP的基本概念304
8.3.2 封装304
8.3.3 继承305
8.3.4 多态性305
8.3.5 典型的面向对象的程序语言306
8.3.6 RAPTOR对OOP的支持306
8.4 逆向工程: 从代码到流程图312
8.4.1 CVF介绍312
8.4.2 CVF流程图与RAPTOR的比较315
8.4.3 AutoFlowchart介绍315
8.5 电子表格软件与数值计算316
8.6 小结与回顾320
习题320
附录A RAPTOR图形操作指南322
A.1 RAPTOR图形坐标322
A.2 色彩322
A.2.1 设置颜色323
A.2.2 生成随机色彩323
A.3 绘图操作323
A.3.1 清理窗口324
A.3.2 画弧324
A.3.3 画圆325
A.3.4 画椭圆325
A.3.5 绘制可以旋转角度的椭圆326
A.3.6 绘制位图326
A.3.7 装载位图327
A.3.8 画线327
A.3.9 填色327
A.3.10 取得像素的色彩328
A.3.11 设置像素的色彩328
A.4 键盘操作328
A.4.1 取键值329
A.4.2 取键字符串329
A.4.3 判断某个键是否处于按下状态330
A.4.4 判断某个击键动作是否已经发生过330
A.4.5 等待键入331
A.5 鼠标操作331
A.5.1 取得鼠标按键与指针位置331
A.5.2 取得鼠标指针的X值331
A.5.3 取得鼠标指针的Y值332
A.5.4 判断鼠标键是否处于按下状态332
A.5.5 判断鼠标键是否被按下过332
A.5.6 判断鼠标键是否已经释放333
A.5.7 等待某个鼠标按键动作333
A.6 文本操作333
A.6.1 显示数字334
A.6.2 显示文本334
A.6.3 取得字模的高度334
A.6.4 取得字模的宽度335
A.6.5 设置字号335
A.7 窗口操作335
A.7.1 关闭窗口335
A.7.2 取得窗口的最大高度336
A.7.3 取得窗口的最大宽度336
A.7.4 判断图形窗口是否打开336
A.7.5 打开图形窗口337
A.7.6 设置窗口的标题栏337
A.7.7 平滑动画显示效果337
术语对照表339
参考文献348
参考网站349
参考文献197
Copyright(C)清华大学出版社有限公司,All Rights Reserved 京ICP备10035462号 联系我们