在计算机的世界中,算法本质上是我们对某一个问题或者某一类问题的解决方案。也就是说,如果我们想用计算机来解决问题的话,就必须将问题的解决思路准确而完整地描述出来,同时计算机也要能理解这个描述。这需要我们这些程序员将整个描述转化成一系列清晰的指令,这些指令要能接收满足一定规范的输入,并在有限的时间内产生出相应的输出。我们通常将这些指令称为程序,而算法则是程序的灵魂。

然而,程序光有灵魂是不够的。例如,诚然搜索算法可以用来解决搜索类问题,但我们通常是不会为搜索而搜索的。所有搜索算法在进入程序的时候,都要面对一些实质性的内容,比如新闻信息、论文存档,而这些内容往往都有具体的存储系统,如数据库、文件系统等。这些系统本身也有各自的数据结构,如图、树、列表等,所以算法并不是我们写程序时唯一要考虑的问题。在很多现实情况下,它甚至还不是主要问题。

所以,如果用C或C++来进行编程教学的话,我们对于算法设计的专注力很容易被数据结构这种更为基础的细节干扰。毕竟用这些语言实现并使用好数据结构本身就已经很复杂了。因此,如果想专注于算法教学,就需要一种不太需要程序员在数据结构上花太多时间的编程语言。

在相当长的一段时间里,我们在进行算法设计的时候通常用的是一种更接近于人类语言的“伪代码”。这种代码足够抽象,能让我们专注于算法的表达,但遗憾的是,它们无法在计算机中执行,我们最终还是要将其翻译成真正的编程语言。这很管用,但显然不够优雅。我们需要一种既能在抽象层面接近于这些“伪代码”,又能在计算机上像C那样通用的语言。Python就是这样一种语言。

这本书就是一本用Python来进行算法设计教学的书,本书的作者在其上一本著作《Python基础教程》中已经展现了其丰富的教学经验和技术实力,我本人亦从中受益匪浅。能翻译他的后续作品,我深感荣幸。但翻译一本算法书所需要付出的时间和精力还是远远超出了我的想象。而且,当我译了近八个月,终于快将本书第1版译完的时候,它的第2版又出版了。于是我不得不找了两个朋友(见译者简介),他们的工作是重新针对第2版对译稿进行校对、增改以及最后两章的初译。我很感谢他们给予我的帮助。除此之外,我还要感谢我的好朋友、《深入解析Windows操作系统》(第6版)的译者范德成工程师,他全程参与了本书的校对,对译稿进行了严格审阅,提供了很多宝贵建议。

祝愿这本书能给读者们带来帮助,同时也希望你们阅读快乐。

《Python算法教程》译者序的更多相关文章

  1. python算法介绍:希尔排序

    python作为一种新的语言,在很多功能自然要比Java要好一些,也容易让人接受,而且不管您是成年人还是少儿都可以学习这个语言,今天就为大家来分享一个python算法教程之希尔排序,现在我们就来看看吧 ...

  2. Python快速教程 尾声(转)

    原文地址: http://www.cnblogs.com/vamei/p/3603046.html 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留 ...

  3. python快速教程-vamei

    2016年10月26日 12:00:53 今天开始着手python的学习,希望能高效快速的学完! Python基础(上)... 7 实验简介... 7 一.实验说明... 8 1. 环境登录... 8 ...

  4. Python 简明教程 ---10,Python 列表

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...

  5. Python快速教程 尾声

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 写了将近两年的Python快速教程,终于大概成形.这一系列文章,包括Python基 ...

  6. 改写《python基础教程》中的一个例子

    一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...

  7. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  8. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  9. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

    始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...

随机推荐

  1. iOS 页面显示在键盘之上

    美丽又可爱的UED妹子文晓的给我提了一个问题,就是在键盘升起的时候,添加的加载页面(loading)被键盘挡住了. 看到问题之后我就想到了问题的所在,因为以前我可敬可爱的领导给我们科普过,说UIAla ...

  2. c# UrlEncode,UrlDecode

    用 C#  winform  处理 utf-8,gb2312编码转换方法 首先,在项目属性 的  应用程序——目标框架中,选择 .NET Framework 4 然后再添加引用——.NET 中选择  ...

  3. 用css实现条纹背景

    我先额外的说一下怎么用CSS绘制三角形: 绘制三角形是把边框加粗,将元素的宽高都设为0,让其余的边框颜色透明,下面我们来看实现的代码: 先把边框的颜色设置成不同颜色: #div{ border-col ...

  4. iis express 局域网访问

    查找到配置文件添加一条绑定局域网可访问的IP地址即可: 事例: <site name="Join.Lims.Mob(11)" id="19"> &l ...

  5. GSM Hacking Part② :使用SDR捕获GSM网络数据并解密

    0×00 在文章第一部分 GSM Hacking Part① :使用SDR扫描嗅探GSM网络 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密 ...

  6. java并发编程学习笔记(一)初识并发原子性

    1.并发的意义 现在是一个多核的时代,并发的存在意义就是为了能够充分利用多核计算机的优势,提高程序的运行效率: 2.并发的风险 竞争-----多个线程对内存数据数据进行读写操作时,对数据处理结果的一个 ...

  7. ios 改变push方向,可以把present改为push方式

    - (void)pop{    CATransition* transition = [CATransition animation];    transition.duration = 0.5;   ...

  8. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

  9. Html 之菜单导航(二)

    网页菜单 网页菜单是一个网页的重要部分,它提供了用户可以对网站所有页面的导航,也是可能是内容的分类,例如淘宝  衣服 鞋子 水果 电脑 等等之类,也可以是 类似于游戏宣传网页一样子,酷炫的js特效 f ...

  10. Rxjava的基本使用

    gradle配置: compile 'io.reactivex:rxjava:1.0.9' 观察者: Observer<String> observer = new Observer< ...