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

写给大家看的算法书

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

  • 书  号:978-7-121-28744-2
  • 出版日期:2016-05-30
  • 页  数:192
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 原书名: 図解でかんたんアルゴリズム―情報処理のかなめとなる考え方が手に取るようにわかる!
  • 原书号:9784797370935
  • 维护人:刘皎

相关图书

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

安晓辉 (作者)

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

¥39.00

快学Scala(第2版)

Cay S. Horstmann (作者) 高宇翔 (译者)

Scala是一门主要以Java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。你可以使用Scala编写出更加精简的程序...

¥108.00

产品之路:从靠谱想法到产品落地再到产品推广

于琪 (作者)

本书将产品领域里大家耳熟能详但很可能一知半解的概念串联起来,并整合到一个框架中,讲述如何将用户的问题变为产品设想,并基于此设想实现一个产品,然后将产品进行市场推...

¥79.00

算法神探:一部谷歌首席科学家写给程序员的小说

Jeremy Kubica (作者) 啊哈磊 李嘉浩 (译者)

本书围绕程序设计典型算法,精心编织了一个扣人心弦又趣味横生的侦探缉凶故事。小说主人公运用高超的搜索技巧和精深的算法知识,最终识破阴谋、缉拿元凶。其间,用二分搜索...

¥45.00

大数据时代的算法:机器学习、人工智能及其典型实例

刘凡平 张启玉 刘刚 (作者)

本书介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,以及与机器学习相关的算法,包括数据分类算法、聚类算法、...

¥49.00

啊哈C语言!逻辑的挑战(修订版)

纪磊 (作者)

这是一本非常有趣的编程启蒙书,全书从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。并配合超萌的编程软件,从开始学习与计算机对...

¥31.50
算法是大数据分析与处理的关键基础。本书以漫画形式轻松讲解算法的基本知识、关键应用,并以案例贯穿其中,明白易懂。将高大上的算法以明白易懂的方式说透,是本书最大特色,适合与数据相关的从业人员学习、了解。本书以漫画形式轻松讲解算法的基本知识、关键应用,并以案例贯穿其中,明白易懂。
推荐序
记得有一次,朋友读书时看见了“维恩图”一词,不明白它的意思,于是跑来问我。当时,我大致是这么回答的 :“假设有若干个元素,同时还有若干种性质。为了直观地表现出哪些元素具有哪些性质,我们可
以在平面上画出若干个封闭曲线,每个封闭曲线内的区域代表某种性质,然后把各个元素填写在正确的区域里。如果某个元素同时具有两个或多个性质,那就必须把它填写在相应的两个或多个区域的公共部分里。所
以,我们要求这些封闭区域必须恰当地相交,使得每种可能的公共部分都存在。”
看见朋友一副茫然的表情,我只好找来纸和笔,举了一个实际的例子 :“如果这三个圆形区域分别代表‘奇数’、‘质数’、‘平方数’,那么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

读者评论