《计算机科学概论(第12版)》—第0章0.1节算法的作用

绪0论 绪论
计算机科学概论(第12版)
在开篇的这一章,我们探讨计算机科学所涉及的领域,介绍其历史背景,然后为我们的深入学习奠定基础。

本章内容

0.1 算法的作用

0.2 计算机器的由来

0.3 学习大纲

0.4 计算机科学的首要主题

计算机科学这门学科,是要为计算机设计、计算机程序设计、信息处理、问题的算法解决方案和算法过程本身等主题建立科学的基础。计算机科学既是当今计算机应用的支柱,又是今后计算基础设施的基础。

本书将详细介绍计算机科学,探索广阔的主题,包括构成大学计算机科学课程的大部分主题。我们要领略这个领域的博大精深和变化发展。因此,除了这些主题本身,我们还关注它们的历史发展、现今的研究动态以及今后的前景。我们的目标是让人们以学以致用的态度来对待计算机科学——既帮助那些要在此领域继续深入学习的人,也促成其他领域的人在技术不断进步的社会崭露头角。

0.1 算法的作用
首先让我们了解一下计算机科学最基础的概念——“算法”。一般来讲,算法(algorithm)是完成一项任务所遵循的一系列步骤。(在第5章,我们将给出比较精确的定义。)例如,有关于烹饪的算法(称为菜谱),有在陌生城市准确定位的算法(通常称为道路指南),有使用洗衣机的算法(通常标示在洗衣机盖子的内侧或者贴在自助洗衣店的墙上),有演奏音乐的算法(以乐谱的形式表示),还有魔术表演的算法(见图0-1)。

在一台机器(如计算机)执行一项任务之前,必须先找到完成这项任务的算法,并且用与该机器兼容的形式表示出来。某一个算法的表示称作一个程序(program)。为了人们读写方便,计算机程序通常打印在纸上或者显示在计算机屏幕上。为了便于机器识别,程序需要采取一种与该机器技术兼容的形式进行编码。开发程序、采取与机器兼容的形式进行编码并将其输入到机器中的过程,称作程序设计(programming)。程序及其所表示的算法总称为软件(software),而机器设备本身则称为硬件(hardware)。

算法的研究起源于数学学科。事实也的确如此,它是数学家的重要活动,远远早于当今计算机的出现。它的目标是找出一组指令,描述如何解决某一特定类型的所有问题。求解两个多位数商的长除算法(long division algorithm)是早期研究中一个最著名的例子。另一个例子是古希腊数学家欧几里得发现的欧几里得算法——求两个正整数的最大公约数(见图0-2)。

一旦我们找到了执行一个任务的算法,那么在执行该任务时,就不再需要了解该算法所依据的原理——任务的执行演变成了遵照指令操作的过程。(我们可以根据长除算法求商,或者根据欧几里得算法求得最大公约数,不需要了解算法的工作原理。)在某种意义上,解决这个问题的智能被编码到算法中。

通过算法来捕获和传达智能(至少是智能行为),我们能够设计出执行有用任务的机器。因此,机器的智能级别受限于算法所传达的智能。只有存在执行某一项任务的算法时,我们才可以制造出执行这一任务的机器。换言之,如果我们找不到解决某问题的算法,机器就解决不了这个问题。

20世纪30年代,库尔特·哥德尔(Kurt Gödel)发表了不完备性定理的论文,它使确定算法能力的局限性成为数学的一个研究课题。这个定理的主旨就是,在任何一个包括传统意义的算术系统的数学理论内,总有一些命题的真伪无法通过算法的手段来确定。简言之,对于我们算术系统的任何全面研究都超越了算法活动的能力。这一认识动摇了数学的基础,于是关于算法能力的研究随之而来,它开创了今天计算机科学这门学科。的确,正是算法的研究构成了计算机科学的核心。

时间: 2024-10-20 09:10:55

《计算机科学概论(第12版)》—第0章0.1节算法的作用的相关文章

《趣题学算法》—第0章0.1节App程序与算法

第0章 从这里开始趣题学算法0.1 App程序与算法 0.2 计算问题 0.3 算法的伪代码描述 0.4 算法的正确性 0.5 算法分析 0.6 算法运行时间的渐近表示 0.7 算法的程序实现 0.8 从这里开始 0.1 App程序与算法信息时代,人们时刻都在利用各种App解决生活.工作中的问题,或获取各种服务.早晨,手机里设定的闹钟铃声(或你喜欢的音乐)将你唤醒.来到餐厅,你用手中的IC卡到取餐处的刷卡机上支付美味早餐的费用.上班途中,打开手机上的音乐播放器,用美妙的乐声,打发掉挤在公交车上的

《趣题学算法》—第0章0.6节算法运行时间的渐近表示

0.6 算法运行时间的渐近表示由于计算机技术不断地扩张其应用领域,所要解决的问题输入规模也越来越大,所以对固定的n来计算T(n)的意义并不大,我们更倾向于评估当n→∞时T(n)趋于无穷大的快慢,并以此来分析算法的时间复杂性.我们往往用几个定义在自然数集N上的正值函数Ỹ(n):幂函数nk(k为正整数),对数幂函数lgkn(k为正整数,底数为2)和指数函数an(a为大于1的常数)作为"标准",研究极限 lim_{ntoinfty}frac{T(n)=lambda }{widetilde{Y

《计算机科学概论(第12版)》—第0章0.4节计算机科学的首要主题

0.4 计算机科学的首要主题除了上面列出的每一章的主题之外,我们希望通过对以下几个首要主题的探讨,拓宽读者对计算机科学的理解. 计算机的微型化及其功能的扩展,已经把计算机技术推向了当今社会的最前沿.如今,计算机技术已经非常普及,熟练掌握其应用已经成为现代社会成员的基本要求.计算机技术已经改变了政府施加控制的能力,对全球化经济产生了巨大的影响,导致科学研究领域出现了一些令人瞩目的成就,革新了数据收集.存储和应用的作用,为人们提供了新的通信和交互方式,不停地挑战着社会现状.结果是,围绕着计算机科学的

《计算机科学概论(第12版)》—第0章0.4节算法

0.4.1 算法数据存储容量有限,程序设计过程复杂耗时,这些限制了早期计算机器所能处理的算法的复杂性.如今,随着这些局限性的消除,机器能完成的任务越来越大.越来越复杂.人们试图用算法表达这些任务,但单凭人类的智力无法做到,于是,越来越多的研究工作转向了算法和程序设计过程的研究. 正是在这种背景下,数学家的理论研究开始有了回报.由于哥德尔不完备性定理,数学家已经在研究有关算法过程的问题了,而这正是先进技术目前面临的问题.由此,孕育出了被称作计算机科学的这门学科. 如今,计算机科学已经奠定了它算法科

《计算机科学概论(第12版)》—第0章0.2节计算机器的由来

0.2 计算机器的由来 今天的计算机有着庞大久远的世系渊源,其中较早的一个计算设备是算盘.历史告诉我们,它可能源于中国古代且曾被用于早期希腊和罗马文明.算盘本身非常简单,一个矩形框里固定着一组小棍,而每个小棍上又各串有一组珠子(见图0-3).在小棍上,珠子上下移动的位置就表示所存储的值.正是这些珠子的位置代表了这台"计算机"所表示和存储的数据.这台机器是依靠人的操作来控制算法执行的.因此,算盘自身只算得上一个数据存储系统,它必须在人的配合下才能成为一台完整的计算机器. 从中世纪到近代,

《趣题学算法》—第0章0.7节算法的程序实现

0.7 算法的程序实现 有了解决问题的正确算法,就可以利用一种计算机程序设计语言将算法实现为可在计算机上运行的程序.本书选用业界使用最广泛.最成熟的C++语言来实现解决每一个问题的算法.C++语言是面向对象的程序设计语言,它为程序员提供了一个庞大的标准库.有趣的是,C++脱胎于C语言.所以,读者若具有C语言某种程度的训练,对于理解本书提供的C++代码一定是大有裨益的.闲话少说,让我们先来一睹C++语言程序的"芳容"吧. 解决问题0-1"计算逆序数"的C++程序如下.

《趣题学算法》—第0章0.3节算法的伪代码描述

0.3 算法的伪代码描述 上一节最后一段使用自然语言(汉语)描述了解决"计算逆序数"问题的算法.即如何将输入数据转换为输出数据的过程.在需要解决的问题很简单的情况下(例如"计算逆序数"问题),用自然语言描述解决这个问题的算法是不错的选择.但是,自然语言有一个重要特色--语义二岐性.语义二岐性在文学艺术方面有着非凡的作用:正话反说.双关语--.由此引起的误会.感情冲突--带给我们多少故事.小说.戏剧--.但是,在算法描述方面,语义二岐性却是我们必须避免的.因为,如果对

《趣题学算法》—第0章0.8节从这里开始

0.8 从这里开始作为本书讨论的起点,本章通过解决一个典型的计算问题"计算逆序数",明确了诸如算法.伪代码.算法分析.C++程序等概念.术语或名称.通过讨论问题"移动电话"给出了本书每个问题讨论的体例:描述问题--理解问题--设计算法--分析算法的效率. 如果你是一位编程初学者,在看了这两个例子后是否会有这样的问题:怎么会想到这样解这些问题?其实,这和你在学校里学习数学时解应用题很相像.首先,看看题目是归类于代数.几何还是微积分?如果是代数题,再看是用解方程方法还是

《趣题学算法》—第0章0.4节算法的正确性

0.4 算法的正确性 解决一个计算问题的算法是正确的,指的是对问题中任意合法的输入均应得到对应的正确输出.大多数情况下,问题的合法输入无法穷尽,当然就无法穷尽输出是否正确的验证.即使合法输入是有限的,穷尽所有输出正确的验证,在实践中也许是得不偿失的.但是,无论如何,我们需要保证设计出来的算法的正确性.否则,算法设计就是去了它的应用意义.因此,对设计出来的算法在提交应用之前,应当说明它的正确性.这就需要借助我们对问题的认识与理解,利用数学.科学及逻辑推理来证实算法是正确的.例如,对于解决"计算逆序