首先,对于大部分程序员而言,在工作中不是必须的,但是你要找工作,特别是刚毕业参加校招的学生,想进入一些比较大的公司(BAT之流),是必须要学好算法的。
此外,在提高自我技术水平的过程中,比如去阅读一些优秀的代码的时候,也是需要算法功底的,就像去看leveldb、redis源码的时候,起码得知道跳表是个啥吧,看Linux内核文件系统的代码得知道红黑树是个啥吧。
再就是有一个很重要的影响:算法学的好的话,不论对你思考问题的方式还是对你编程的思维都会有很大的好处。
另外关于刷题的网站还是首推Leetcode。
如果有一些算法基础的话,推荐Codeforces。
至于资料书籍的话,其实没有太多要求,网上的资料很多,随便谷歌一下就能找到很多详细的资料。
算法导论的话不推荐,不推荐初学者看。这本书是本神书,但是这本书的门槛比较高,需要有一定数学基础和算法基础的人去研究,如果你没有一定的基础或者对算法狂热的学习兴趣,你很难啃下去。
改了一下知识列表的结构,分了下类,可能更加清楚一点。这里面基础是我觉得必须应该掌握的,中等的是有如有余力最好学习的,高级的可以了解,可以了解一下,对于个别感兴趣的可以深入学习一下。
‘贰’ 数据结构和算法用什么语言来学习入手比较好
C语言会比较好,C更加基础,书籍大部分也是C、C++的,如果只考虑java和C++的话,C++比较好,算法的话《算法导论》很经典,数据结构的话可以看《算法与数据结构》傅清祥 王晓东版的。
‘叁’ 《算法导论》这本书是用什么语言写的
用伪代码(Pseudocode)写的。伪代码(Pseudocode)是一种算法描述语言,本身不能被解释或者编译。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java,etc)实现。
‘肆’ 算法导论书页边上的框起来的数字是什么。。有什么用。。
是对应英文原版书的页码。
‘伍’ 算法导论里面的大师解法是什么 用大师解法计算下面递归表达式的时间复杂度. T(n)=2T(n/2) + Θ(n^0.1)
#a i从0循环到n,算法复杂度为O(n)。
#b 一共要做n^2/2次加法,算法复杂度为O(n^2)。
#c 要求一个k,满足2^k>=n ,算法复杂度为O(log(n))
#d 注意到这个函数做的事跟#c的函数恰好相反,算法复杂度相同,也是O(log(n))
#e 因为已算出#g每次做3(n-3)次加法,那么i从1到n,一共做2/3*(n^2-5n+6)次加法,所以复杂度为O(n^2)。
#f 这个函数可以写成公式T(n)=T(n-2)+T(n-1),这个递归式跟黄金分割有关系,解这个递归式,可以知道 T(n) = O((√5-1/2)^n)
#g 函数调用一共做3(n-3)次加法,所以复杂度为O(n)
PenitentSin 这位兄台的#c 算的不对啦,#g也不对。还有#f,这个虽然是递归,但不是递归就等于指数级的复杂度,要解递归方程才能断定的。
关于算法复杂度,《算法导论》一书中第四章有一个主定理,记住这个定理之后,这些问题就小case了(除了复杂递归之外)。
‘陆’ 可以《C Primer Plus》和《算法导论》一起使用学习1C语言吗初学者
不行。C primer plus 可以先学,但是算法导论这个你必须要有深厚的编程功底,否则还是老老实实把C语言基础打牢固,并且学习一些算法基础上才可以看算法导论(当然要是你聪明有天赋,直接学也是可以的)
‘柒’ 学习计算机算法有什么用啊
《算法导论》
《算法概论》
《算法艺术与信息学竞赛》
《世界大学生程序设计竞赛(acm/icpc)高级教程》--程序设计中常用的计算思维方式
这是吴文虎写的
很好
现在很缺货阿
麻烦加点分吧!!!!!!!!