推荐一本很好的算法入门书籍:程序员
《算法设计与分析基础》(第2版),(美) Anany Levitin 著, 潘彦译。算法
除了 《 Thinking in Java 》,这是我另一本读过了三分之二内容还但愿不断翻阅的书籍。这本书写得很不错,能够感觉到做者是尽力去贴近读者,讲解清晰易懂,涉及比较全面,并且有很多在其它算法书籍中从未曾讲到的东西(好比算法问题求解基础,大量引人思考的谜题)。并发
整体来讲,可读性很强,趣味性强,实用性尚可,在理论性和实用化之间进行了很好的平衡和折衷,有很好的启发做用。若是你但愿有一本容易理解的而又具有必定深度的算法入门书籍,那么,本书可算是上佳的首选。spa
最权威的算法书籍天然是《算法导论》了。通用算法类书籍,我以为有这两本足矣!貌似还有一本叫作《程序员实用算法》的书籍,只是在书店随便翻了翻,看书名可推知,这本书用做随身算法手册应该很不错。设计
PS:关于算法的思考资源
算法到底是什么?顾名思义,计算之方法。算法就是使用计算的方法来实现问题求解的思路和途径。开发
硬件提供计算所需的物理资源;而算法,则提供计算所需的思想和技术。硬件和算法,共同构成了计算机的计算能力。软件,不过是硬件与算法的结合所产生的可以使用的逻辑实体。数学
这就涉及三个基本问题:什么是计算? 如何计算? 一切均可计算吗?it
什么是计算?入门
1. 通俗意义上的计算,指的就是数学运算,加减乘除、取模以及其它,而大部分计算(包括减、乘、除、取模,不管多么复杂)均可使用加法来实现;
2. 计算机如今已经可以处理文本,那么,处理文本的计算技术是怎样的?
3. 在接近计算机硬件层面,任何运算都使用位运算来实现;如何用位运算来实现各类运算,毫无疑问,是数学家最擅长的事情。
4. 位运算是物理状态的逻辑表征和变化。物理状态可由电子、机械或其它任何可能的物理实体来实现;毫无疑问,这是物理学家最擅长的事情。
5. 在人体和其它生物里,计算的物理实体多是神经元、生物电之类所运载的东西,究竟以什么做为计算单位,至今仍是个谜。
如何计算?
首先,涉及科学计算的部分,天然是与数学和各特定领域(尤为是工程领域)有关,一般能够遵循相关的定理和公式来计算和改进;涉及文本数据处理的计算技术,则是计算机新兴的应用领域;如何计算的问题,大概就是选取计算基本单位(好比加减乘除,数据复制)及其如何组合的问题了(控制流程,顺序或并发)。
并发计算,或者并行计算,一定成为将来的主流。人脑所采用的计算方式,很可能采用了并行方式。假设一平方米空间能放置100块CPU,那么, 100 平方米的空间可放 10000 块CPU , 假设并行计算算法的利用率是 50% , 那么, 也有 5000块的CPU计算能力, 这意味着,如今一年的计算量,可能只须要 365 / 5000 × 24 = 1.752 小时 的工做量。想一想,若是采用更好的并行技术,将来的IT世界会是什么样,不可思议。
一切均可计算吗?
显然,至少目前来讲,答案是否认的。这是可计算性理论的问题。而且,若将算法机械地应用于平常生活,经常会显得很是笨拙。人类(乃至其它生物)究竟采起了怎样的计算单位和方式,使得人们在思考问题时显得如此的灵巧多变,仍是一个很是值得探索的问题。
程序开发者的位置?
跨过物理运算层面和位运算层面,在其基础上实现1, 2 的问题求解。而且,关于科学计算部分,主要由研究相关领域的科学家来完成;对于程序开发者来讲,所谓的算法,应当主要指文本处理所用到的算法技术。