A. 学习数据结构,有哪些值得推荐的好书
作者:向小刚
链接:https://www.hu.com/question/19987046/answer/13945644
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. CLRS 算法导论
算法网络全书,只做了前面十几章的习题,便感觉受益无穷。
2. Algorithms 算法概论
短小精悍,别据一格,准经典之作。一个坏消息: 同算法导论,该书没有习题答案。好消息:习题很经典,难度也适中,只需花点点时间自己也都能做出来。不好也不坏的消息:我正在写习题的答案,已完成前三章,还剩九章约二百道题,顺利的话二个月之后发布。另有中文版名《算法概论》,我没看过,不知道翻译得怎么样。如果有心的话,还是尽量看原版吧,其实看原版与看中文版花费时间不会相差很大,因为大部分时间其实都花费在做习题上了。
dr. dobb's essential books on Algorithm and daba structure
3. Algorithm Design 算法设计
很经典的一本书,很久之前看的,遗憾的是现在除了就记得它很经典之外其它都忘光了。
4. SICP 计算机程序的构造和解释
六星之书无需多言,虽然这不是一本讲算法的书,但看完此书有助于你更深入的理解什么是递归。我一直很强调习题,看完此书后你至少应该做完前四章的太部分习题。否则那是你的遗憾,也是作者的遗憾。
5. Concrete Mathematics 具体数学
有人说看TAOCP之前应该先弄清楚这本书的内容,要真是如此的话那我恐怕是看不到TAOCP了。零零碎碎的看了一大半,很多东西都没有时间来好好消化。如果你是刚进大学不久的本科生,有着大把的可自由支配时间,那你幸运又幸福了,花上几个月时间好好的读一下此书吧,收获绝对大于你的期望值。
6. Introction to The Design and Analysis of Algorithms 算法设计与分析基础
很有趣的一本算法书,有许多在别的书上找不到的趣题,看完此书绝对能让你大开眼界,实在是一本居家旅行,面试装逼的必备佳作。
7. 编程之美--微软技术面试心得
虽说是一本面试书,但如果把前面十几页扯掉的话,我更愿意把它看作是一本讲解题思维的算法小品。在书中,作者通常是给出一个平常解法,然后再一次又一次的优化改进,你可以很清楚的看到基本的算法设计思想是如何得到运用以解决实际问题的。如果你已经有了一些算法的基础,看完本书应该能使你的算法应用能力得到一定的提高。另外,本书生动有趣,也同样适合于初学者。
8. Fundamentals of Algorithmics 算法基础
也是很久之前在学校图书馆借来看的,内容记不太清楚了,只隐约记得此书的动态规划章节犹为出彩。应该是很经典的一本书,个人以为足以和算法导论等所谓当世经典平分秋色,但是怎么好像被人提到的不多,或许是我孤陋寡闻了。
9. How to solve it 怎样解题
二十世纪最伟大的数学思想家之一波利亚的力作,讲一般性的解题方法:怎么认识问题,怎么转换问题,怎么解决问题,如何在问题中得到启发,如何找到一个通往答案的方向。
10. Programming interviews exposed 程序员面试攻略
一本消遣之作。个人以为要比国内的某“XXX面试宝典”纯粹一些,至少也有一些启发性的内容,而不单单是面试题解库。
11. Programming Pearls 编程珠玑
学习算法不仅需要像Alogrithms,算法导论这样的重量级的内功心法,像《编程之美》、《编程珠玑》这样的轻量级的轻功身法也必不可少。前些年网上不是很流行像“给你10亿个数,找到最大的n个”或者“给你10亿个数,找出现次数最多的那个数”之类的网络面试题吗?看了此书你就知道怎么解决了。相比于《编程之美》来说,本书中的示例技巧性略低一些,但是也更有实际应用价值一些。
12. 算法艺术与信息学竞赛
如果算法导论是九阳神功,那这本无疑就是九阴真经。本书是专为参加一些诸如ACM之类程序设计比赛的同学而写的,江湖人称“黑书”。里面讲的都是一些在编程比赛中常用的算法、数据结构,以及一些数论和计算几何等。我虽然并不搞竞赛,但也从此书中受益颇多。
13. An Introction to Probability Theory and Its Applications
准备看的,现在才发现概率论有多么重要,可惜本科的时候没有好好学。前不久一个同学问我个问题,我半天弄了一个程序给他,他说:这里就不是相关系数么,Excel一下就完事!我晕,我还真不知道那就是相关系数。
14. Numerical Analysis
这本的作者是Richard L. Burden,J. Douglas Faires
数值分析,讨论各种数值算法,比如插值、拟合、积分、微分方程的求解、线性和非线性方程组求解等。准备详细看。
15. TAOCP 计算机程序设计艺术
传说中的TAOCP,说的人多,看的人少。TAOCP四卷堪称是算法藏经阁中的易筋经或者是少林七十二绝技。天下武学,尽出少林,天下算法,尽出TAOCP也。
B. 算法的方法
程序调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。
用贪心法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。
贪婪算法是一种改进了的分级处理方法,其核心是根据题意选取一种量度标准,然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量,如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。
对于一个给定的问题,往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。
一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。 分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
分治法所能解决的问题一般具有以下几个特征:
(1) 该问题的规模缩小到一定的程度就可以容易地解决;
(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
(3) 利用该问题分解出的子问题的解可以合并为该问题的解;
(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。
动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。 分枝界限法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。
分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支,这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。因此这种算法一般可以求得最优解。
与贪心算法一样,这种方法也是用来为组合优化问题设计求解算法的,所不同的是它在问题的整个可能解空间搜索,所设计出来的算法虽其时间复杂度比贪婪算法高,但它的优点是与穷举法类似,都能保证求出问题的最佳解,而且这种方法不是盲目的穷举搜索,而是在搜索过程中通过限界,可以中途停止对某些不可能得到最优解的子空间进一步搜索(类似于人工智能中的剪枝),故它比穷举法效率更高。 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
其基本思想是,在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。 若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。 而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。
C. 谁有一些介绍经典程序算法设计方法的文章啊
国内的
<计算机算发设计与分析>王晓东 编著 电子工业出版社
《C 常用算法程序集》 清华大学出版社
《计算机算法基础》,华中理工出版社
国外的
<<the art of computer program>>
《算法引论》 电子工业出版社
《算法导论(第2版)》(英文)
D. 在判断创造性时如何考虑算法特征的作用
算法的改进能够提高计算机的内部性能,那么在撰写权利要求时应当体现算法与计算机具体技术参数、结构部件等的结合,体现该算法在整个方案中发挥的技术作用。例如,如果发明请求保护一种涉及提高硬盘访问速度的方法和设备,其解决方案为通过改进硬盘数据的读取和写入算法来提高数据访问速度,那么在撰写权利要求时,不但要在权利要求中记载算法的具体实现步骤,还要记载与硬盘数据读写相关的技术内容,更要写明该算法对计算机硬盘读写部件或操作在技术上的配合、影响或作用,以体现出计算机因该算法的改进使得其访问速度获得更好性能,以此区别于仅仅在计算机上运行了该新的算法。
E. 创造性的方法有哪些
1、创造性的方法——隐喻技巧
隐喻在写作中很常见,但我们不能忽视这种创造性方法在设计中的作用。如果我们想使用隐喻,我们可以用一些东西来代替产品或元素,它们需要有一定的相似性。例如,我们会比较吃辣椒和吃火的感觉。
2、创造性的方法——不同的设计
有时,一些不同的效果也可以给我们一些视觉上的吸引力。例如,如果它从中间发散,通常会选择一些条纹,以便光线从中间发散到四周。看起来很有创意。
3、创造性的方法——主题延伸了深刻的内容
有时候,一旦你决定了你的设计主题,你就需要把它扩展到更深的地方,这样你就可以保持好奇心,并留下更深的印象。需要想象力和联想才能产生更有趣和更有创意的方法。例如钻石,它扩展了爱情的概念,将会更受欢迎。
4、创造性的方法——异质同构思维
异质同构也是一种更有创意的设计方法。它通常使用两个或两个以上的元素,这些元素在性质上有明显的不同,但可以组合成一个新的元素,非常有创意,有一种复杂的统一和对比感。
在设计的过程中,我们要表现出独特的效果,单靠灵感是很难达到的。选择适当的创造性的方法将使我们的操作更容易,所以在设计过程中,我们必须知道灵感的重要性。后续将会有更多关于平面设计的设计技巧与资讯,可以点击本站的其他文章进行学习。
F. 推荐一些关于算法的书籍
1、数据结构与算法分析:C语言描述(适合入门)
这本书相对于算法导论要简单一些,更适合入门。算法导论其实有比较强的理论性,看起来比较吃力。
《数据结构与算法分析:C语言描述》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。由于《数据结构与算法分析:C语言描述(原书第2版)》选材新颖,方法实用,题例丰富,取舍得当。《数据结构与算法分析:C语言描述》的目的是培养学生良好的程序设计技巧和熟练的算法分析能力,使得他们能够开发出高效率的程序。从服务于实践又锻炼学生实际能力出发,书中提供了大部算法的C程序和伪码例程。
2、算法设计与分析基础(适合入门)
作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法都能进行准确分类,从而使本书的读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。
3.0、算法引论:一种创造性方法(适合入门)
和普通的算法书不同,这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法。结合前面的算法设计与分析基础,这本书把能解决的算法问题数量扩大了一个数量级。
3.1 算法竞赛 | 信息学奥赛一本通(算竞入门)
AlphaWA同学推荐的入门书籍,网上没有PDF版本,自己去淘宝买喽。
3.2 算法竞赛 | 算法竞赛进阶指南(算竞进阶)
G. 什么是创造性思维方法
1)创造性思维,是一种具有开创意义的思维活动,即开拓人类认识新领域、开创人类认识新成果的思维活动.
2)创造性思维是以感知、记忆、思考、联想、理解等能力为基础,以综合性、探索性和求新性特征的高级心理活动。
创造性思维并非游离于其它思维形式而存在,它包括了各种思维形式。
创造性思维需要人们付出艰苦的脑力劳动。一项创造性思维成果的取得,往往要经过长期的探索、刻苦的钻研、甚至多次的挫折之后才能取得,而创造性思维能力也要经过长期的知识积累、素质磨砺才能具备,至于创造性思维的过程,则离不开繁多的推理、想象、联想、直觉等思维活动。
创造性思维具有以下几方面的特点:
创造性思维具有新颖性,它贵在创新,或者在思路的选择上、或者在思考的技巧上、或者在思维的结论上,具有着前无古人的独到之处,在前人、常人的基础上有新的见解、新的发现、新的突破,从而具有一定范围内的首创性、开拓性。
创造性思维具有极大的灵活性。它无现成的思维方法、程序可循,人可以自由地海阔天空地发挥想象力。
创造性思维具有艺术性和非拟化的特点,它的对象多属“自在之物”,而不是“为我之物”,创造性思维的结果存在着两种可能性。
创造性思维具有着十分重要的作用和意义。首先,创造性思维可以不断增加人类知识的总量;其次,创造性思维可以不断提高人类的认识能力;再次,创造性思维可以为实践活动开辟新的局面。此外,创造性思维的成功,又可以反馈激励人们去进一步进行创造性思维。正如我国著名数学家华罗庚所说:“‘人’之可贵在于能创造性地思维。”
补充:创造性思维是一种开创性的探索未知事物的高级复杂的思维,是一种有自己的特点、具有创见性的思维,是扩散思维和集中思维的辩证统一,是创造想象和现实定向的有机结合,是抽象思维和灵感思维的对立统一。创造性思维是指有主动性和创见性的思维,通过创造性思维,不仅可以提示客观事物的本质和规律性,而且能在此基础上产生新颖的、独特的、有社会意义思维成果,开拓人类知识的新领域。广义的创造性思维是指思维主体有创见,有意义的思维活动,每个正常人都有这种创造性思维。狭义的创造性思维是指思维主体发明创造、提出新的假说、创见新的理论,形成新的概念等探索未知领域的思维活动,这种创造性思维是少数人才有的。 创造性思维是在抽象思维和形象思维的基础上和相互作用中发展起来的,抽象思维和形象思维是创造性思维的基本形式。除此之外,还包括扩散思维、集中思维、逆向思维、分合思维,联想思维。其中扩散思维是从所给的信息中产生信息,着重点是从同一来源中产生各种各样为数众多的输出,并且很可能发生移转作用。集中思维是从所给的信息中产生逻辑的结论,其着重点是产生独有的或者习惯上所接受的最好的成果。逆向思维是把思维方向逆转过来,用对立的表面看来似乎不可能并有的两条思路同时去寻找解决问题之答案的形式。分合思维是一种把思考对象在思想中加以分解或合并,然后获得一种新的思维产物的思维方式。联想思维是一种把已经掌握的知识与某种思维对象联系起来,从其相关性中发现启发点从而获取创造性设想的的思维形式。 创造性思维是创造成果产生的必要前提和条件,而创造则是历史进步的动力,创造性思维能力是个人推动社会前进的必要手段,特别是在知识经济时代,创造性思维的培养训练更显得重要。其途径在于丰富的知识结构、培养联想思维的能力、克服习惯思维对新构思的抗拒性,培养思维的变通性,加强讨论,经常进行思想碰撞。
H. 推荐一些算法比较好的书
刘汝佳的《算法艺术与信息学竞赛》,这本书很适合搞算法竞赛的看。
《算法导论》这本书就不用多说了,经典
Udi Manber 的《Introction to Algorithms: A Creative Approach》中文名《算法引论:一种创造性方法》
当然还有很多书,上面三本我有幸看过
I. 《算法引论-一种创造性方法》中的表达式lbn表示什么意思
以2为低的对数
即log2(N)
J. 《算法引论:一种创造性方法》txt全集下载
算法引论:一种创造性方法 txt全集小说附件已上传到网络网盘,点击免费下载:
内容预览: