漫画算法:小灰的算法之旅(Python篇) - (EPUB全文下载)

文件大小:0.14 mb。
文件格式:epub 格式。
书籍内容:

漫画算法:小灰的算法之旅(Python篇)
第1章 算法概述
第2章 数据结构基础
第3章 树
第4章 排序算法
第5章 面试中的算法
第6章 算法的实际应用
欢迎关注微信公众号“程序员小灰”
第1章 算法概述
1.1 算法和数据结构
1.1.1 小灰和大黄
在大四临近毕业时,计算机专业的同学大都收到了满意的offer,可是小灰却还在着急上火。虽然他这几天面试了很多家IT公司,可每次都被面试官“虐”得很惨很惨。
就在心灰意冷之际,小灰忽然想到,他们系里有一位学霸名叫大黄,大黄不但技术很强,而且很乐于帮助同学。于是,小灰赶紧去找大黄,希望能够得到一些指点。
1.1.2 什么是算法
算法,对应的英文单词是algorithm,这是一个很古老的概念,最早来自数学领域。
有一个关于算法的小故事,估计大家都有耳闻。
在很久很久以前,曾经有一个顽皮又聪明的“熊孩子”,天天在课堂上调皮捣蛋。
终于有一天,老师忍无可忍,对“熊孩子”说:
臭小子,你又调皮啊!今天罚你算加法,算出1+2+3+4+5+6+7+…,一直加到10000的结果,算不完不许回家!
嘿嘿,我算就是了。
老师以为,“熊孩子”会按部就班地一步一步计算,就像下面这样。
1+2=3
3+3=6
6+4=10
10+5=15
……
这还不得算到明天天亮?够这小子受的!老师心里幸灾乐祸地想着。
谁知仅仅几分钟后……
老师,我算完了!结果是50005000,对不对?
这,这,这……你小子怎么算得这么快?我读书多,你骗不了我的!
看着老师惊讶的表情,“熊孩子”微微一笑,讲出了他的计算方法。
首先把从1到10000这10000个数字两两分组相加,如下:
1+10000=10001
2+9999=10001
3+9998=10001
4+9997=10001
……
一共有多少组这样结果相同的和呢?有10000÷2即5000组。
所以1到10000相加的总和可以这样来计算:
(1+10000)×10000÷2=50005000
这个“熊孩子”就是后来著名的犹太数学家约翰·卡尔·弗里德里希·高斯,而他所采用的这种等差数列求和的方法,被称为高斯算法。(上文的故事情节与史实略有出入。)
这是数学领域中算法的一个简单示例。在数学领域里,算法是用于解决某一类问题的公式和思想。
而本书所涉及的算法,是计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。
从宏观上来看,数学领域的算法和计算机领域的算法有很多相通之处。
算法有简单的,也有复杂的。
简单的算法,诸如给出一组整数,找出其中最大的数。
复杂的算法,诸如在多种物品里选择装入背包的物品,使背包里的物品总价值最大,或找出从一个城市到另一个城市的最短路线。
算法有高效的,也有拙劣的。
刚才所讲的从1加到10000的故事中,高斯所用的算法显然是更加高效的算法,它利用等差数列的规律,四两拨千斤,省时省力地求出了最终结果。
而老师心中所想的算法,按部就班地一个数一个数进行累加,则是一种低效、笨拙的算法。虽然这种算法也能得到最终结果,但是其计算过程要低效得多。
在计算机领域,我们同样会遇到各种高效和拙劣的算法。衡量算法好坏的重要标准有两个:
• 时间复杂度
• 空间复杂度
具体的概念会在本章进行详细讲解。
算法的应用领域多种多样。
算法可以应用在很多不同的领域中,其应用场景更是多种多样,例如下面这些。
1.运算
有人或许会觉得,不就是数学运算嘛?这还不简单?
其实还真不简单。
例如,求出两个数的最大公约数,要做到效率的极致,的确需要动一番脑筋。
再如计算两个超大整数的和,按照正常方式来计算肯定会导致变量溢出。这又该如何求解呢?
2.查找
当你使用谷歌、百度搜索某一个关键词,或在数据库中执行某一条SQL语句时,你有没有思考过数据和信息是如何被查出来的呢?
3.排序
排序算法是实现诸多复杂程序的基石。例如,当浏览电商网站时,我们期望商品可以按价格从低到高进行排序;当浏览学生管理网站时,我们期望学生的资料可以按照学号的大小进行排序。
排序算法有很多种,它们的性能和优缺点各不相同,这里面的学问可大着呢!
4.最优决策
有些算法可以帮助我们找到最优的决策。
例如在游戏中,可以让AI角色找到走出迷宫的最佳路线,这涉及A星寻路算法。
再如,对于一个容量有限的背包来说,如何决策才可以使放入的物品总价值最高,这涉及动态规划算法。
5.面试(如果这条也算的话)
凡是已走上工作岗位的程序员,在面试过程中多多少少都经历过算法问题的考查。
为什么面试官那么喜欢考查算法呢?
考查算法问题,一方面可以检验程序员对计算机底层知识的了解,另一方面也可以衡量程序员的逻辑思维能力。
1.1.3 什么是数据结构
算法的概念我大致明白了,那数据结构又是什么呢?
数据结构是算法的基石。如果把算法比喻成美丽灵动的舞者,那么数据结构就是舞者脚下广阔而坚实的舞台。
数据结构,对应的英文单词是data structure,是数据的组织、管理和存储格式,其使用目的是高效地访问和修改数据。
数据结构都有哪些组成方式呢?
1.线性结构
线性结构是最简单的数据结构,包括数组、链表,以及由它们衍生出来的栈、队列、哈希表。
2.树
树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出了二叉堆之类的数据结构。
3.图
图是更为复杂的数据结构,因为在图中会呈现出多对多的关联关系。
4.其他数据结构
除上述所列的几种基本数据结构以外,还有一些其他的千奇百怪的数据结构。它们由基本数据结构变形而来,用于解决某些特定问题,如跳表、哈希链表、位图等。
有了数据结构这个舞台,算法才可以尽情舞蹈。在解决问题时,不同的算法会选用不同的数据结构。例如排序算法中的堆排序,利用的就是二叉堆这样一种数据结构;再如缓存淘汰算法LRU(Least Recently Used,最近最少使用),利用的就是特殊数据结构哈希链表。
关于算法在不同数据结构上的操作过程,在后续的章节中我们会一一进行学习。
想不到算法 ............

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家 AI应用导航 研报之家
书云 Open E-Library » 漫画算法:小灰的算法之旅(Python篇) - (EPUB全文下载)