《算法基础:打开算法之门》一1.5 拓展阅读

1.5 拓展阅读

我主观地认为,描述计算机算法最清楚、最有用的书籍是由四个精力充沛的美男子写的《算法导论》(Introduction to Algorithms[CLRS09])。该书通常被称为“CLRS”,即四位作者名字的首字母。我在本书中多次引用《算法导论》中的内容。《算法导论》远比本书完整、详细,但是它假定你至少编写过一点计算机程序,并且懂得大量数学知识。如果你发现你能轻松地理解本书的数学知识,并且已经做好了深入研究这一主题的准备,那么《算法导论》是你的最佳选择。(当然,这只是我个人拙见。)

John MacCormick的《Nine Algorithms That Changed the Future》[Mac12]描述了几种算法和影响我们日常生活的相关计算知识。MacCormick的《Nine Algorithms That Changed the Future》[Mac12]相对于本书涵盖了更少的技术。如果你发现这本书的写作方式过于偏向数学,那么我建议你尝试阅读MacCormick的那本书。即使你的数学背景很薄弱,你应该也能理解那本书的大多数理论。

万一你认为《算法导论》太浅,你可以尝试读一下Donald Knuth的《The Art of Computer Programming》[Knu97,Knu98a,Knu98b,Knu11](TAOCP)。虽然从书名来看它主要研究编码细节,8但是该书包含了非常精彩的、深入的算法分析。但是,要注意,该书的内容是非常深奥的。顺便说一下,如果你很好奇“algorithm”这个单词的由来,Knuth会告诉你,它来源于9世纪一个波斯数学家的名字“alKhowrizm^l”。

除了《算法导论》之外,还有许多已经出版或发表多年的计算机算法方面的优秀文献。《算法导论》的第1章列出了许多这样的参考文献。与其复制那个列表,不如你自己看看《算法导论》。9

时间: 2024-09-11 18:59:19

《算法基础:打开算法之门》一1.5 拓展阅读的相关文章

《算法基础:打开算法之门》一导读

前言 Algorithms Unlocked 计算机是如何解决问题的呢?小小的GPS是如何只在几秒钟内就从无数条可能路径中找出到达目的地的最快捷路径的呢?在网上购物时,又如何防止他人窃取你的信用卡账号呢?解决这些问题,以及大量其他问题的答案均是算法.我写本书的目的就是为你打开算法之门,解开算法之谜. 我是<算法导论>的合著者之一.<算法导论>是一本特别好的书(当然,这是我个人的主观评价),但是它确实相当专业. 本书并不是<算法导论>,甚至不能被称为一本教材.它既没有对计

《算法基础:打开算法之门》一1.2 资源利用

1.2 资源利用 什么样的算法才能称为高效使用计算资源的算法呢?我们在讨论近似算法时提及了一个衡量效率的标准:时间.一个能给出正确输出但是会花费很长时间才能得出结果的算法可能是没有价值的.如果你的GPS需要一个小时才能计算出推荐的驾驶路线,你还会愿意打开GPS吗?诚然,一旦我们知道某算法能给出一个正确输出,时间便是我们用来衡量算法效率的主要方式.但是时间不是唯一的衡量标准.由于一个计算机算法必须能够在可用的内存空间上运行,因此我们可能还需要考虑该算法需要占用多大的计算机内存空间(它的"内存占用量

《算法基础:打开算法之门》一第3章 排序算法和查找算法

第3章 Algorithms Unlocked 排序算法和查找算法 在第2章中,我们看到了在数组上进行线性查找的三个算法.我们能做得更好吗?答案是:看情况.如果不清楚数组中的元素是否有序,我们是不可能做得更好的.在最坏情况下,我们必须查找数组的所有n个元素,因为如果在前n-1个元素中不能找到要找的值,那么要查找的元素可能在第n个位置上.因此,当我们不清楚数组中的元素是否有序时,我们不可能实现比Θ(n)更好的最坏情况运行时间. 然而,假定数组是以非递减顺序排序的,那么根据"非递减"的含义

《算法基础:打开算法之门》一2.1 如何描述计算机算法

2.1 如何描述计算机算法 将计算机算法描述成一个可执行程序可以有多种选择,例如使用通用的编程语言表示,像Java.C.C++.Python或Fortran.诚然,许多教科书上的算法都是这么表示的.但是使用实际的编程语言来表示算法所带来的问题是你可能会在语言细节上越陷越深,而对算法本身的认识反而模糊不清.另一种表示算法的方式是"伪代码",就像我们在<算法导论>中使用的一样,它听起来像是多种编程语言和英语的混合表示.如果你曾用一种实际的编程语言编写过程序,那么你就能很容易地搞

《算法基础:打开算法之门》一2.5 拓展阅读

2.5 拓展阅读 <算法导论>[CLRS09]中的第2章和第3章的内容涵盖了本章的大多数知识点.这是一本由Aho.Hopcroft和UIIman[AHU74]所写的一本早期的算法方面的教科书(其中使用渐进符号来分析算法),深深地影响了计算机领域.另外还有大量的著作用来证明程序的正确性:如果你想深入研究这个领域,可以参考由Gries[Gri81]和Mitchell[Mit96]所写的书籍.24

《算法基础:打开算法之门》一3.7 拓展阅读

3.7 拓展阅读 CLRS [CLRS09]涵盖了插入排序.归并排序,以及确定快速排序和随机快速排序算法.但是关于排序和查找的权威书籍依然是Knuth的<计算机程序设计艺术>第3卷[Knu98b]:第1章所提及的建议也适用于这一章内容--TAOCP做出了非常深奥的研究.

数据结构与算法系列(2)基础排序算法

前言 在计算机中实现存储数据最普遍的两种操作就是排序和查找.这是从计算机产业初始就已经确认的 了.这意味着排序和查找也是计算机科学领域最值得研究的两种操作.本书提到的许 多数据结构的主要设计目的就是为了使排序和/或查找更加简单,同时也是为了数据在结构内的存 储更加有效. 本章会介绍有关数据排序和查找的基础算法.这些算法仅依赖数组作为数据结构,而且所采用的 "高级"编程技术只是递归.本章还介绍了用来非正式分析不同算法之间速度与效率的方 法,此方法贯穿全书. 1.排序算法 人们在日常生活中

程序员必须知道的10大基础实用算法及其讲解

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为 "

java-一道基础的算法,答案是什么?

问题描述 一道基础的算法,答案是什么? 看开始看算法(第四版) 第一张的一道练习 给出以下表达式的类型和值 d. 1+2+'3'**** 这个我觉得java是会自动转化为字符型吗? 我就自己println试验了一下. System.out.println(1+2+'3'); 结果为54,不懂了,求教. 但是我看了网上的答案是33?一样不懂 我已经知道了,题目中是我错误 原题是双引号,字符型 1+2+"3" 我看成1+2+'3'了.不过倒是加深了理解,谢谢各位 解决方案 带单引号的3是字