写给大家看的算法书
  • 推荐0
  • 收藏3
  • 浏览697

写给大家看的算法书

(日)杉浦 贤 (作者)  梁文森 (译者)

  • 书  号:978-7-121-28744-2
  • 出版日期:2016-05-30
  • 页  数:192
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 原书名: 図解でかんたんアルゴリズム―情報処理のかなめとなる考え方が手に取るようにわかる!
  • 原书号:9784797370935
  • 维护人:刘皎
算法是大数据分析与处理的关键基础。本书以漫画形式轻松讲解算法的基本知识、关键应用,并以案例贯穿其中,明白易懂。将高大上的算法以明白易懂的方式说透,是本书最大特色,适合与数据相关的从业人员学习、了解。本书以漫画形式轻松讲解算法的基本知识、关键应用,并以案例贯穿其中,明白易懂。
推荐序
记得有一次,朋友读书时看见了“维恩图”一词,不明白它的意思,于是跑来问我。当时,我大致是这么回答的 :“假设有若干个元素,同时还有若干种性质。为了直观地表现出哪些元素具有哪些性质,我们可
以在平面上画出若干个封闭曲线,每个封闭曲线内的区域代表某种性质,然后把各个元素填写在正确的区域里。如果某个元素同时具有两个或多个性质,那就必须把它填写在相应的两个或多个区域的公共部分里。所
以,我们要求这些封闭区域必须恰当地相交,使得每种可能的公共部分都存在。”
看见朋友一副茫然的表情,我只好找来纸和笔,举了一个实际的例子 :“如果这三个圆形区域分别代表‘奇数’、‘质数’、‘平方数’,那么1 就该填到这儿, 2 就该填到这儿, 3 就该填到这儿……”
朋友忽然兴奋地说 :“哦,我好像懂了!维恩图的意思是不是就是,当我想知道眼前的一群人是一群什么样的人时,我就在地上画几个圈,分别表示‘已婚’、‘党员’、‘上班族’,等等,然后每个人属于哪些类就站进哪些圈子里,而且我在地上画的圈需要保证,不管来了什么样的人,他总能找到个地儿站!”
“没错没错,就是这样!”我激动地说道,仿佛恍然大悟的是我一样。
类似的经历我还遇到过一次,只不过我的位置换了一下。你知道吗?
在现实生活中可能出现某些商品,它的价格升高时,人们的购买量也随之增加。这样的商品叫作“吉芬商品”。很有趣吧!很想搞明白这背后的原理吧!第一次听说这样的经济学现象后,我也感到非常好奇,我也
很想知道这背后的原理。我在网上查到了很多与此相关的文章,它们的标题大多类似于“吉芬商品背后的直观解释”。每篇文章里都出现了同一个生词,“无差异曲线”。不管阅读哪篇文章,我都会卡在这个生词处。
什么是无差异曲线?这看起来似乎是经济学中的一个非常基本的东西,因为几乎所有作者在讲解时,都会假设读者已经知道了它的意思。
无奈,我又开始搜寻“无差异曲线”的意思,结果仍然是一头雾水。
大多数地方给出的解释是这样的 :“一条条从左上方延伸到右下方的曲线,说明消费者的偏好不变时,若其中一种商品的消费增加,另一种商品的消费会如何减少……同一条曲线上面的每一点对应的商品组合是不
同的,但是人们从中得到的效用却是相同的。”对于从没接触过经济学的人来说,这样的句子简直如天书一般。
最后,借来一本经济学教材,研究了里面的好几个例子,才让我茅塞顿开 :唉,说得这么麻烦干什么,无差异曲线其实就是购买不同数量的 A 和 B,给人带来的满足感的“等高线”嘛!懂得什么是无差异曲
线之后,再看吉芬商品的讲解文章时,就完全没有障碍了。
学习一门新的学科,往往会遇到很多新的概念。不幸的是,专家们对这些概念太过熟悉,很难意识到这会成为初学者理解的障碍 ;即使意识到了这一点,恐怕一时也很难想到一种真正面向初学者的、简单直白
一语中的的解释;即使想到了这样的解释,综合考虑文体、篇幅等原因,或许也不会真的写下来。种种经历让我深知,填补这个空白是很有必要的。但是,谁来填补这个空白呢?
幸运的是,现在,编程初学者有了像《写给大家看的算法书》这样的书。学习编程变得简单多了。数组,其实就是一排印有号码的储物柜;
堆栈,其实就是桌面上堆积的书……书中充满了这些生动有趣的比方,它们总能让我由衷地感叹 :这比方打得实在是太贴切了。
《写给大家看的算法书》里还会谈到一些更基本的问题。为什么依次执行 X ← Y 和 Y ← X 不能交换两个变量的值?这是因为,往变量里代入值的时候,旧的值是会被覆盖掉的。在专业的程序员看来,这几乎
是废话 ;但谁能想到,或许恰恰就是这句“废话”,解答了某个初学者百思不得其解的困惑。你是否读过很多编程入门读物,但仍然觉得有门槛?那么,这本书值得你尝试。
在信息化和大数据的背景下,人们的思维也或多或少地受到了计算机模型的影响,讨论问题时“树”、“节点”、“字符串”等词常常是张口就来。如果由于学习或者工作的原因,你时不时地会遇到这些陌生的词
汇,相信这本书也会对你有帮助。
数学科普作家 顾森

前 言
计算机自 20 世纪发明以来得到了飞速的发展,在 21 世纪的现代社会,不仅仅是个人计算机,智能手机、电视、电子照相机、游戏机等预装计算机的设备也越来越普及。甚至,地铁的自动刷卡设备、 ATM 自
动柜员机、自动贩卖机等现代社会生活中不可或缺的机器,如果没有了计算机,那么机器的控制、顾客的管理、财务的管理、售卖的管理等各种各样的公司业务全都开展不了。
为了编写在计算机上可以良好运行的程序,我们必须学习“算法”。本书的主旨就是从基础开始详尽地讲解算法。为了让初学者也能充分理解内容,“尽可能通俗易懂”,笔者尽量让大家在轻松学习算法的同时,
也可以尝试理解计算机编程中用到的一些思维方式。另外,为了让中学生也能轻松阅读,本书虚构了埃里根博士、小艾、小莉这三个角色,对算法相关的知识进行讲解。请把自己想象成小艾或者小莉,尝试在埃里根博士的算法讲座中学习吧。
第 1 章 探讨了“什么是算法”这个话题。算法这个词汇可能大家日常生活中接触不多,所以乍听之下会有晦涩艰深的感觉。但简单来说,算法就是“为解决特定问题需要进行的处理步骤”。本章为讲解得更通
俗易懂,拿日常生活中的菜谱做类比。
第 2 章 主要对描述算法的重要元素“数据”进行讲解,包括数据的存、取方法等。另外,本章也对在算法表示问题解决步骤时所必需的“变量”进行讲解,本章详细讲解了它作为数据存储的“盒子”的特征。
第 3 章 讲述了对各种不同形式的数据进行管理的“数据结构”这种管理方式。本章还对其中的特例,如“数组”、“链表”、“树”等数据结构各自的优缺点进行了讲解。
第 4 章 介绍了算法中记述处理步骤的最重要的要素“循环”及使用“循环”进行复用处理的方法。
第 5 章 介绍了最重要的算法之一“排序”。本章从低效但简单的排序处理讲起,由浅入深讲解复杂但高效的排序处理。
第 6 章 介绍了另一类最重要的算法——“搜索”。本章会讲述单纯的搜索、已排序的数据的搜索,以及字符串的搜索等。
第 7 章 介绍一些解决数学问题的算法。本章主要讲解了可以在科学计算领域派上用场的“求解高斯方程”、“求解方程组”及“求定积分的值”等算法。
第 8 章 探讨了“算法和计算机”这个话题。主要解释了一些为实现算法需要了解的计算机相关的基础知识。
通读本书,如果读者能够稍稍消除“算法是什么呀”这种顾虑,并且产生“原来如此,探究起来,计算机程序就是由一些简单的处理组合起来的东西啊”这样的想法的话,那真是笔者的荣幸。另外,如果本书
的内容能成为大家以后熟悉计算机后编写良好、高效的程序的基础的话,
那我真是太开心了。
2012 年 11 月 杉浦贤

目录

第 1 章 什么是算法 ............................................................. 1
1.1 算法其实就在身边 .......................................................................2
1.2 算法是人类智慧的结晶 ...............................................................4
1.3 了解算法对玩游戏有帮助吗 .......................................................6
1.4 算法有两个必要条件 ...................................................................8
1.5 要特别了解的重要算法 .............................................................10
专题 1 算法基础之结构化编程思想 ...............................................12
第 2 章 变量和数组 ........................................................... 13
2.1 所谓“数据”,就是各种各样的信息 .......................................14
2.2 数据有不同的类型 .....................................................................16
2.3 最基础的数据是“值” ...............................................................18
2.4 装着“值”的盒子叫作“变量” ...............................................20
2.5 要描述算法,变量是不可或缺的 .............................................22
2.6 所谓“代入”,指的是把数据赋予变量 ...................................24
2.7 不同的变量有不同的名称 .........................................................26
2.8 变量命名要能解释变量装载的数据 .........................................28
2.9 把数据代入变量的赋值语句 .....................................................30
2.10 把变量中存储的值代入其他变量 ...........................................32
2.11 变量也有数据类型 ....................................................................34
2.12 保存大量同一数据类型值的“数组” .....................................36
目 录
写给大家看的算法书
X
2.13 数组用“数组名”标记 ...........................................................38
2.14 数组的元素用“下标”管理 ...................................................40
2.15 什么时候需要用到“数组”呢 ...............................................42
2.16 “数组”就像储物柜一样 .........................................................44
2.17 “二维数组”就像是旅馆里的房间 .........................................46
2.18 二维数组的各个元素用两个下标来管理 ...............................48
2.19 字符串就是字符的连续拼合(数组) .....................................50
2.20 获取字符串长度的两个方法 ...................................................52
专题 2 常用变量命名 .......................................................................54
第3章 数据结构 ............................................................... 55
3.1 为了高效处理大量数据 .............................................................56
3.2 有哪些常用的数据结构 .............................................................58
3.3 “堆栈”类似于桌面上堆积的书 ...............................................60
3.4 “队列”就像是超市收银台前排着的队列 ...............................62
3.5 “链表”就像用绳子串起来的长串 ...........................................64
3.6 只能检索下一个数据的单向链表 .............................................66
3.7 能检索上一个或者下一个数据的双向链表 .............................68
3.8 能快速定位第 N 个数据的是“数组” .......................................70
3.9 能快速插入、删除数据的是“链表” .......................................72
3.10 像钟表一样数据首尾相连的是“环形缓冲区” .....................74
3.11 管理有树干、树枝、树叶一样关系的数据的是“树” ..........76
3.12 一个父节点对应两个子节点的是“二分树” .........................78
3.13 像笔画的节点和连线组成的数据结构是“图” .....................80
专题 3 为什么数组的起始下标有时是 0,有时是 1 ? ................82
第4章 学习算法基础 ........................................................ 83
4.1 循环处理是算法的基础 .............................................................84
4.2 计算 1 ~ N 的整数的总和 .........................................................86
目录
XI
4.3 使用数组可以高效地处理大量数据 .........................................88
4.4 计算一年的营业额 .....................................................................90
4.5 求班级考试的总分和平均分 .....................................................92
4.6 求最高分 .....................................................................................94
4.7 求最低分 .....................................................................................96
4.8 为考试成绩排名 .........................................................................98
4.9 求全班学生不同科目考试合计的总分 ...................................100
4.10 求“时分秒”形式的时间差 .................................................102
4.11 交换两个变量值的技巧 ..........................................................104
4.12 求两个数值的最大公约数 .....................................................106
专题 4 2038 年的时候要留心? ....................................................108
第 5 章 排序算法 ............................................................. 109
5.1 排序是指对多个数据排列顺序 ...............................................110
5.2 关于排序算法 ...........................................................................112
5.3 使用“木桶”辅助的“桶排序” .............................................114
5.4 每次找出一个最小(最大)值的“选择排序” .....................116
5.5 像冒泡一样进行相邻数据的交换的“冒泡排序” .................118
5.6 向有序数据里正确位置插入数据的“插入排序” .................120
5.7 把几个有序数据合并叫作“归并” .........................................122
5.8 利用归并进行排序的算法叫作“归并排序” .........................124
5.9 改进了排序效率的“希尔排序” .............................................126
5.10 最快的排序算法“快速排序” ...............................................128
专题 5 把 2 的 n 阶乘的值记下来吧 .............................................130
第 6 章 搜索算法 ............................................................. 131
6.1 所谓“搜索”,就是从数据集合中找到目标数据 .................132
6.2 从头开始按顺序排除的搜索叫作“线性搜索” .....................134
6.3 可以进行高速搜索的“二分搜索” .........................................136
写给大家看的算法书
XII
6.4 利用哈希表实现高效搜索 .......................................................138
6.5 在字符串中搜索部分字符串的“字符串搜索” .....................140
6.6 高效搜索字符串的 KMP 算法 .................................................142
6.7 逆向比较的 BM 字符串搜索算法 ...........................................144
专题 6 在关系型数据库中使用到的排序和搜索 .........................146
第 7 章 其他算法 ............................................................. 147
7.1 用牛顿法求解高次方程 ...........................................................148
7.2 用高斯消元法求解方程组 .......................................................150
7.3 用梯形面积和来求解定积分的梯形法 ...................................152
7.4 计算质数的埃拉托斯特尼筛法 ...............................................154
7.5 执行时调用自身的递归函数 ...................................................156
专题 7 算法和流程图 .....................................................................158
第 8 章 算法和计算机 ..................................................... 159
8.1 计算机的数据是用二进制来表示的 .......................................160
8.2 让二进制数更易于阅读(八进制、十六进制) .....................162
8.3 二进制转换成十进制 ...............................................................164
8.4 十进制转换成二进制 ...............................................................166
8.5 用二进制表示负整数 ...............................................................168
8.6 逻辑或 :任意一个为“ 1”则结果为“ 1” .............................170
8.7 逻辑并 :同时为“ 1”则结果为“ 1” .....................................172
8.8 “或非”:“ 1”和“ 0”得到的结果为“ 1” .............................174
8.9 “否定”:“ 1”变为“ 0”,“ 0”变为“ 1” ...............................176
8.10 使用德摩根定律可以管理否定范式 .....................................178

本书勘误

印次
  • 页码:71  •  行数:3  •  印次: 2

    “所以可以通过ARRAY[5]”中的元素下标应为4

    亲爱的牛顿先生 提交于 2017/1/9 23:06:38
    千年老妖 确认于 2017/1/16 16:26:32
  • 页码:96  •  行数:2  •  印次: 2

    副标题“数组数据中的最大值”中的“最值”排版错误,应为“最值”

    亲爱的牛顿先生 提交于 2017/1/9 23:08:38
    千年老妖 确认于 2017/1/16 16:26:55
  • 页码:99  •  行数:倒数第4行  •  印次: 2

    “RANK[0]的值加1”表达有些模糊,改为“RANK[0]的值都要加1”。

    亲爱的牛顿先生 提交于 2017/1/9 23:12:19
    千年老妖 确认于 2017/1/16 16:27:11

读者评论

相关图书

算法训练营:进阶篇(全彩版)

《算法训练营:进阶篇(全彩版)》图文并茂、通俗易懂,详细讲解数据结构和算法进阶知识,并融入大量的竞赛实例和解题技巧,可帮助读者领悟数据结构和算法的精髓,并熟练应...

 

算法训练营:入门篇(全彩版)

本书图文并茂、通俗易懂,详细讲解常用的算法知识,又融入了大量的竞赛实例和解题技巧,可帮助读者熟练应用各种算法解决实际问题。 本书总计9章。第1章讲解C++基础...

 

算法笔记(第2版)

刁瑞 谢妍 (作者)

ChatGPT掀起了现象级的风暴,赶超ChatGPT潮流,算法突破是关键。 本书介绍了若干常见算法,涉及排序、哈希、动态规划与近似算法、高斯消去法、图论与线性...

 

算法训练营:海量图解+竞赛刷题(入门篇)

陈小玉 (作者)

本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种...

 

算法训练营:海量图解+竞赛刷题(进阶篇)

陈小玉 (作者)

本书以海量图解的形式,详细讲解常用的数据结构与算法,并结合竞赛实例引导读者进行刷题实战。通过对本书的学习,读者可掌握22种高级数据结构、7种动态规划算法、5种动...

 

解忧程序员——高薪编程、求职面试与成长转型宝典

安晓辉 (作者)

本书是专为程序员而编写的。全书浅显易懂,深入浅出,书中从各个角度,全面地解读了程序员这个特定人群,在日常程序设计工作中遇到的种种问题及解决办法,如何设计代码,如...

¥39.00