计算机科学精粹(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-12 01:41:09

点击下载

作者:(巴西)沃德斯顿·费雷拉·菲尔多(Wladston Ferreira Filho)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

计算机科学精粹

计算机科学精粹试读:

前言

每个人都应该学习计算机编程,因为它教会你如何思

考。——史蒂夫 • 乔布斯

计算机以前所未有的力量改变了世界,一门新学科随之兴起,这就是计算机科学。它揭示了如何利用计算机解决问题,帮助我们充分发挥计算机的潜能。在这门学科的指引下,我们取得了难以置信的成就。

计算机科学无处不在,但学校传授的仍然是枯燥的理论,不少程序员甚至从未研究过它。然而,计算机科学对于实现高效的程序设计至关重要。我的一些朋友很难聘用到优秀的程序员——计算机虽然功能强大,可以驾驭它的人却不多。

我希望通过这本书推动读者高效地使用计算机。本书将以简明扼要的形式介绍计算机科学的知识,尽量少涉及学术概念。但愿计算机科学能在读者心中扎根,并提高读者编写代码的水平。图 1 “计算机问题”(取自 https://xkcd.com/)目标读者

对于希望采用高效方法解决问题的读者,本书将是不二之选。编程经验并非必需,如果读者曾经写过代码,也了解 for 与 while 这样的基本编程语句,阅读本书将不会遇到任何障碍。不熟悉计算机科学1的读者可以通过 Codecademy 进行学习,其在线课程提供一周的免费试听服务。而对具备计算机科学经验的读者来说,本书能有效地巩固所学知识。1许多平台都提供不错的在线课程,涵盖 Web 开发、数据处理、人工智能、深度学习等多个领域。lynda.com、Udacity 都是北美较为知名的在线教育平台。——译者注计算机科学并非只和学者有关

这是一部关于计算思维的作品,适合所有人阅读。读者将学习如何把问题转换为可计算的系统,并在日常生活中应用计算思维:预取和缓存能简化打包过程,而并行有助于提高烹饪速度。另外,读者的代码会变得很棒!2

愿原力与你同在。2《星球大战》中绝地武士在分别时表示“再见”的祝福语,后引申为现实世界中粉丝之间的祝福语。——译者注查尔斯 • 巴贝奇的分析机原理图查尔斯 • 巴贝奇的分析机原理图第 1 章预备知识计算机科学并非一门研究机器的学科,如同天文学并非

研究望远镜一样。从本质上讲,数学与计算机科学具有统一

性。1——艾兹赫尔 • 戴克斯特拉1艾兹赫尔 • 戴克斯特拉(Edsger Dijkstra,1930—2002),荷兰计算机科学家,其贡献涵盖编译器、操作系统、分布式系统、软件工程、编程语言、图论等多个领域,数据结构中的最短路径算法——戴克斯特拉算法就是以他的名字命名的。1972 年,戴克斯特拉因在编程语言方面的贡献而获得图灵奖。——译者注

计算机只能处理分解成块的问题,因此我们需要具备一定的数学知识。不过无须紧张,数学并非高深莫测,编写优秀的代码也很少要用到复杂的方程。这一章将介绍求解问题所需的基本知识,包括:采用流程图与伪代码对想法进行建模根据逻辑判断对错对事物进行计数安全地计算概率

掌握这些知识后,我们就能将自己的想法转换为可供计算机执行的解决方案。1.1 想法

面对复杂的问题时,请让大脑保持最佳状态,将所有重要内容写下来。我们的大脑很容易被各种事实和想法所淹没,“好记性不如烂笔头”在众多组织方法中占有重要地位。为此,这一节将讨论几种实现方法。首先介绍用于表示进程的流程图,然后利用伪代码编写可供实际编程使用的进程,并尝试通过数学工具对一个简单的问题进行建模。1.1.1 流程图2

在讨论相互之间的协作过程时,维基人 创建了一种随着讨论的进行而更新的流程图。对所提出的内容了然于心有助于讨论。2维基人指在维基百科上编写条目的贡献者,女性维基人有时候也被称为“薇姬人”。——译者注图 1-1 维基百科编辑流程

与上面的编辑流程类似,计算机代码本质上是一种进程。程序员通常使用流程图来编写计算进程。为便于他人理解,绘制流程图时应3遵循以下原则 :3国际标准化组织甚至专门制定了一项称为 UML(统一建模语言)的标准来定义软件系统图的绘制。● 将状态步骤和指令步骤置于矩形框内;● 将决策步骤(对给定的条件进行判断)置于菱形框内;● 不要将指令步骤与决策步骤放在一起;● 使用箭头连接各个顺序步骤;● 标明进程的开始和结束。

我们以查找 3 个数中的最大值为例,来看看如何绘制流程图。图 1-2 查找 3 个变量中的最大值1.1.2 伪代码

与流程图类似,伪代码也可以用来表示计算进程。它是一种符合人类阅读习惯的代码,但无法被机器理解。下面这个示例与图 1-2 的含义相同,读者不妨花些时间,选取若干样本值作为 A、B、C 尝试4一下。4在本例中,←表示赋值运算符。因此,x ← 1 的含义是“将 x 设置为 1”。function maximum(A, B, C) if A > B if A > C max ← A else max ← C else if B > C max ← B else max ← C print max

读者是否注意到,上述代码完全没有遵循编程语言的语法规则?我们甚至可以在伪代码中使用某些口语!如同利用流程图绘制一般性思维导图那样,就让我们的创造力在编写伪代码时得到充分释放吧(如图 1-3 所示)!图 1-3 “现实生活中的伪代码”(取自 http://ctp200.com)1.1.3 数学模型

模型是一组表示问题及其特征的概念,有助于更好地推断与处理问题。创建模型的重要性毋庸置疑,我们从小就受过这方面的训练。中学数学的思路是(或应该是)将问题建模为若干数字和方程,然后应用各种工具进行求解。

采用数学语言描述的模型具有一个无可比拟的优势:它们能在使用完备数学工具的计算机上运行。如果模型中包含图,可以使用图论;如果包含方程,代数将派上用场。利用前人创造的这些工具,问题就能迎刃而解。接下来,我们讨论一个经常在中学数学中出现的问题。家畜围栏 农场里饲养了两种家畜。我们利用 100

个单位长度的铁丝网制作一个矩形围栏,中间用直线将两种

动物隔开。那么应该如何设计围栏,才能让牧场的面积最大

化?

我们从需要求解的值入手分析。如果和为牧场的边长,那么二者的乘积就是牧场的面积。面积最大化意味着使用所有铁丝网,因此和与 100 之间具有以下关系。

现在,问题变成了和取何值,才能使面积最大。

根据第二个方程求出(),然后代入第一个方程:

由此得到一个二次方程,利用中学时学过的二次公式很容易就能求出它的最大值。设并求解方程,最大值为两个根之间的中点。二次方程之于我们,如同高压锅之于厨师,两种工具的共同点是可以节省时间。二次方程能加快许多问题的求解速度,而我们的任务就是解决问题,这一点请谨记在心。厨师需要了解他的工具,我们同样需要掌握自己的工具,数学模型就是我们手中的有力工具。除此之外,逻辑也是解决问题的法宝。1.2 逻辑

程序员与逻辑打交道太频繁,思维都被逻辑搞得一团糟。尽管如此,不少程序员其实并未真正掌握逻辑的知识,只是凭借“本能”在使用它。理解形式逻辑的概念之后,我们就可以用它来审慎地解决问题。图 1-4 “程序员的逻辑”(取自 http://programmers.life)

在这一节,我们首先采用特殊的运算符和代数来处理逻辑陈述,然后学习利用真值表解决问题,并探讨计算机是如何依靠逻辑来工作的。1.2.1 运算符

普通数学使用变量与运算符(+、-、×等)对数值问题进行建模。在数理逻辑中,变量与运算符表示事物的有效性,它们代表的是真(True)或假(False)而非数字。例如,表达式“如果泳池很暖和,我就去游泳”的有效性基于两件事的有效性,二者可以被映射到逻辑变量和。 :泳池很暖和。:我去游泳。5和要么为 True,要么为 False。True 表示“泳池很暖和”,False 表示“我不去游泳”。不可能为半真,因为“我”不可能一半去游泳,一半不去游泳。变量之间的依赖关系通过条件运算符→表示,意味着“当True 时,True”。5在模糊逻辑中,值也可以介于两者之间,但本书不会涉及这方面的内容。:如果泳池很暖和,我就去游泳。

借由其他运算符,我们能表示更多的含义。例如,取反运算符 ! 表示否定,的含义是对取反。:泳池很凉。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载