天天看点

《算法基础:打开算法之门》一第1章 什么是算法以及为什么应该关注算法

本节书摘来自华章出版社《算法基础:打开算法之门》一书中的第1章,作者 [美]托马斯 h 科尔曼(thomas h cormen),更多章节内容可以访问云栖社区“华章计算机”公众号查看

algorithms unlocked

什么是算法以及为什么应该关注算法

让我们从我经常被问到的一个问题开始:“什么是算法?”一个常见的回答是,“完成一个任务所需的一系列步骤。”在日常生活中经常会碰到算法。刷牙的时候会执行一个算法:打开牙膏盖,拿出牙刷,持续执行挤牙膏操作直到足量的牙膏涂在你的牙刷上,盖上牙膏盖,将牙刷放到嘴的1/4处,上下移动牙刷n秒,等等。如果你必须乘通勤车去工作,乘通勤车也是一个算法。诸如此类。〖zw(b]或者,正如一个我曾经一起打曲棍球的同伴问我的,“什么是nalgorithm?”〖zw)]但是本书是关于运行在计算机上的算法的,或者更概括地来讲,是关于运行在计算设备上的算法的。正如你日常所运行的算法会影响你每天的生活一样,在计算机上运行的算法也会影响你的生活。你使用过gps来寻找旅行路线吗?它运行一种称为“最短路径”的算法以寻求路线。你在网上购买商品吗?那么你会使用(应该正在使用)一个运行加密算法的安全网站。当你在网上购买商品时,它们是由一个私营快递公司发货的吗?它使用算法将包裹分配给不同的卡车,然后确定每个司机发件的顺序。算法运行在各种设备上——在你的笔记本上,服务器上,智能手机上,嵌入式系统上(例如你的车中,你的微波炉中,或者气候控制系统中)——无处不在!运行在计算机上的算法和你在日常生活中执行的算法有什么区别呢?当粗略地描述一个算法时,你可能能够容忍它的非精确性,但是计算机不能。例如,如果你开车上班,你的drivetowork算法可能会说“如果交通不畅,可以选择其他路线”。虽然你可能知道“交通不畅”是什么意思,但是计算机不知道。因此,一个计算机算法是完成一个任务所需的一系列步骤,1且这些步骤需要足够精确地描述,以使得计算机能够运行它。如果你已经用java、c、c++、python、fortran、matlab或者类似的编程语言编写过哪怕一丁点的计算机程序,那么你会对精确度标准的含义有一些概念。如果你从来没有编写过计算机程序,那么当你看了本书中如何描述算法后,可能你会对精确度有一点概念。我们思考下一个问题:“我们想从一个计算机算法中获取什么?”计算机算法解决计算问题。我们希望从一个计算机算法中获取两个结果:给定一个问题输入,它应该总能够产生该问题的正确输出结果,并且在运行该算法时,应该能够有效地利用计算资源。让我们依次看看这两个必要条件。

继续阅读