【商品详情】


【内容简介】

基本信息
书名: 啊哈.算法
作者: 啊哈磊 开本:  
*: 45 页数:  
现价: 见顶部 出版时间 2014-06-01
书号: 9787115354594 印刷时间:  
出版社: 人民邮电出版社 版次:  
商品类型: 正版图书 印次:  
内容提要
 
作者简介

纪磊

网名啊哈磊。

曾在中科院玩过单片机。武汉大学历史上第一位以本科生身份加入MSRA(微软亚洲研究院)的小伙伴,在机器学习组从事搜索引擎方面的研究。

发表国际会议论文一篇(IEEE)。

全国青少年信息学奥林匹克金牌教练。

超萌超简洁的C语言编译器——“啊哈C编译器”作者。

2013年,我的第一部著作,有趣的编程科普书《啊哈C!》出版。

 

非常喜欢小朋友,每天都过得都非常开心。

至于为什么叫“啊哈磊”,因为我觉得这是一个很喜庆的名字。

 

精彩导读

我想写一本通俗易懂的算法书很久了,因为对于多数人而言,“算法”给他的第一印象就是很难懂,其实我也是这样。还记得我第一次学习图论的“割点割边”算法时,看过不下于四五本书,其中不乏一些算法经典书籍,还百度了一堆材料,才勉强将其看懂并实现成代码。其实这个算法并不难,核心代码不超过20行,但是很多算法书都是草草叙述,不同的书籍给出的参考代码也是五花八门,有的甚至都不稀罕给你代码,这大大增加了学习的难度。我是花了整整一个晚上才搞定的,当然这其中不排除智商因素。第二印象就是算法是枯燥无趣的,并且好像没什么作用。其实在我们的日常生活之中到处都可见到算法的影子,只不过它通常隐匿在事物的背后,不太容易被发现。但是它每天都在默默地为我们服务着。在本书中我将带你一步步揭开算法的奥秘,带它走近你的身边。
由于算法的内容确实是太多了,要想全部写清楚恐怕几本书都不够,本书将介绍一些最常用的算法。此外算法的实现通常需要依附一些数据结构,因此在必要的时候对于需要用到的数据结构我也会进行讲解。本书中涉及到的数据结构有栈、队列、树、并查集、堆和图等;算法有各种排序、枚举、深度和广度优先搜索、图上的遍历,当然还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、割点与割边算法、二分图的*匹配算法等。
尽管我不敢保证我写的算法你一定可以看懂(但凭着一股强大的自信,我认为初中以上文化程度的应该没问题^_^),但我会以一个故事或者一个你在生活中可能遇到的问题开始对一个算法进行讲解,并尽量用通俗易懂的语言配合有趣的插图让你在阅读本书的时候更像是在品读一篇篇轻松的短篇小说或是在玩一把趣味解谜游戏,在轻松愉悦中掌握算法精髓,感受算法之美。

致谢

本书能得以面世,首先要感谢图灵的陈冰先生。感谢你主动联系我,给予我信心去完成本书的全部,并且提出了很多宝贵的建议。更加令我吃惊的是你竟然能读懂本书的全部算法(包括每一行代码),还发现了很多隐藏得很深的错误,真是一位非常棒的图书出版人。
在书稿创作的过程中,有幸和很多优秀的学生共同学习和探讨,是他们为本书的创作提供了灵感,感谢他们的倾听、交流和建议。他们是武汉二中的吕凯风同学、武汉外国语学校的李嘉浩、熊子健、陈雨禾、郭明达和李丁等同学。
本书之所以变得这么有趣,还必须要感谢我的美女插画师郑佳茜,你灵感涌现的插图功不可没。
感谢我的好友张知严,无私地帮助我搭建了“添柴”编程在线学习系统(tianchai.org),为本书读者提供了更好的学习交流平台。
感谢我的学生胡梦清,感谢你排除万难来参加你人生中的最后一场NOIP竞赛。是你用行动、青春路上追求梦想的精神,告诉我们18岁就应该可爱、执着、不畏惧,敢于朝着梦想前行。
特别感谢我的未婚妻Snowin,是你放弃了近一年来所有的周末和节假日,陪我在书桌旁、咖啡厅里、旅途中……共同完成了本书的每一个字、每一幅图、每一段代码。
最后要感谢我的父母,你们把我拉扯大太不容易了,我爱你们!

啊哈磊
2014年5月6日

 

1节 最快最简单的排序——桶排序

在我们生活的这个世界中到处都是被排序过的东东。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。

 

首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老师要将同学们的分数按照从高到低排序。小哼的班上只有5个同学,这5个同学分别考了5分、3分、5分、2分和8分,哎,考得真是惨不忍睹(满分是10分)。接下来将分数进行从大到小排序,排序后是8 5 5 3 2。你有没有什么好方法编写一段程序,让计算机*读入5个数然后将这5个数从大到小输出?请先想一想,至少想15分钟再往下看吧(*^__^*)。

 

我们这里只需借助一个一维数组就可以解决这个问题。请确定你真的仔细想过再往下看哦。

首先我们需要申请一个大小为11的数组int a[11]OK现在你已经有了11个变量,编号从a[0]~a[10]。刚开始的时候,我们将a[0]~a[10]都初始化为0,表示这些分数还都没有人得过。例如a[0]等于0就表示目前还没有人得过0分,同理a[1]等于0就表示目前还没有人得过1……a[10]等于0就表示目前还没有人得过10分。

 

下面开始处理每一个人的分数,第一个人的分数是5分,我们就将相对应的a[5]的值在原来的基础增加1,即将a[5]的值从0改为1,表示5分出现过了一次。

第二个人的分数是3分,我们就把相对应的a[3]的值在原来的基础上增加1,即将a[3]的值从0改为1,表示3分出现过了一次。

 

注意啦!第三个人的分数也是5分,所以a[5]的值需要在此基础上再增加1,即将a[5]的值从1改为2,表示5分出现过了两次。

按照刚才的方法处理第四个和第五个人的分数。最终结果就是下面这个图啦。

你发现没有,a[0]~a[10]中的数值其实就是0分到10分每个分数出现的次数。接下来,我们只需要将出现过的分数打印出来就可以了,出现几次就打印几次,具体如下。

a[0]0,表示0没有出现过,不打印。

a[1]0,表示1没有出现过,不打印。

a[2]1,表示2出现过1次,打印2

a[3]1

目录
第1章 一大波数正在靠近——排序
第1节 最快最简单的排序——桶排序
第2节 邻居好说话——冒泡排序
第3节 最常用的排序——快速排序
第4节 小哼买书
第2章 栈、队列、链表
第1节 解密QQ号——队列
第2节 解密回文——栈
第3节 纸牌游戏——小猫钓鱼
第4节 链表
第5节 模拟链表
第3章 枚举!很暴力
第1节 坑爹的奥数
第2节 炸弹人
第3节 火柴棍等式
第4节 数的全排列
第4章 *的搜索
第1节 不撞南墙不回头——深度优先搜索
第2节 解救小哈
第3节 层层递进——广度优先搜索
第4节 再解炸弹人
第5节 宝岛探险
第6节 水管工游戏
第5章 图的遍历
第1节 深度和广度优先究竟是指啥
第2节 城市地图——图的深度优先遍历
第3节 最少转机——图的广度优先遍历
第6章 最短路径
第1节 只有五行的算法——Floyd-Warshall
第2节 Dijkstra算法——单源最短路
第3节 Bellman-Ford——解决负权边
第4节 Bellman-Ford的队列优化
第5节 最短路径算法对比分析
第7章 神奇的树
第1节 开启“树”之旅
第2节 二叉树
第3节 堆——神奇的优先队列
第4节 擒贼先擒王——并查集
第8章 更多精彩算法
第1节 镖局运镖——图的最小生成树
第2节 再谈最小生成树
第3节 重要城市——图的割点
第4节 关键道路——图的割边
第5节 我要做月老——二分图*匹配
第9章 还能更好吗——微软亚洲研究院面试

 

 

七天无理由退货服务

 


【目录】

本店全部为正版图书
返回顶部