导航:首页 > 源码编译 > 算法和刷题的思路

算法和刷题的思路

发布时间:2022-05-14 19:04:58

⑴ 请教编程高手:如何培养编写算法的思路

选一本出色的教材.有条件就看英文的,然后给自己一个环境,例如LINUX+GCC+GDB,用纯粹的语言去在解决问题的过程中学习算法.
没有目的性去学习,往往效率不高,可以找一些ONLINE JUDGE的题目做做.例如Welcome To PKU JudgeOnline,对着里面的问题,先自己思考,尝试编程解决,如果不能解决,就翻翻算法书,想想为什么.

如果还是不行,那就上网看看别人有没有解决掉,怎么做,看看他们用到什么算法,比对着,然后进一步自己去实现.
有时候对于算法的问题的实现,你在实现之前也许会卡住,但是在编程过程中,随着你的锻炼和熟练度的提高.会有那么一天你觉得什么都通了,而且,你是在用的过程中学习.坚持走下去,一定事半功倍.

“cracking the coding interview”,题目是按照array, stack&queue, 链表,树图,递归这种章节安排的,每章节题目7-8个,不多,难度中等,找感觉很有帮助。第一遍自己写不出来的话(我就是,这么弱!),画图分析,抄背默。一遍做完再做一遍,第二遍就快很多,理解也深刻了,所谓读书百遍,其意自现,算法也一样。

不要一开始就看《算法导论》,这本书有太多关于算法的数学证明.
推荐你看看这本:算法(第4版) (豆瓣),作者是高德纳的学生:塞奇威克 (Robert Sedgewick)
书中算法代码主要是用Java编写,里面有大量的图来让你明白例如:排序,查找,树和图的算法运行过程。
这本书的目录编排也很清晰,他就告诉你算法主要就可以分为:排序,查找,图和字符串。从这4个方面可以演化出很多算法,最关键是:这本书的作者不但是在告诉你what,而且告诉你why(分析各种算法的优缺点)
这本书其他好的地方
比如讲到快速排序,很多书可能讲了快速排序的原理就完了。但这本书就直接讲了原始的快速排序可以改进的地方:1. 在小数组上,切换到插入排序;2. 三取样切分;3. 三向切分的快速排序。
优先队列怎么和排序算法扯上关系呢?其实优先队列就是可以用堆排序来实现,堆排序的时间复杂度和快速排序是一样的,但是实际中为什么堆排序的运行时间要比快速排序多呢?因为这和CPU的Cache命中率有关系,堆排序不符合算法运行的局部性原则
比如书中2.5节,讲了排序算法的实际用途,这本书不光告诉你算法的原理,还告诉你算法的用途。

⑵ 如何正确的刷题刷题的重要性如何

在日常地学习当中,我们总是离不开读书和刷题这两种方式。读书让我们更加了解课程的基本内容,刷题则让我们能够更好地掌握知识。尤其是处在备考期的学生们,掌握科学的刷题方法,能够使我们顺利地通过考试,取得优异的成绩。

二、刷题的重要性

掌握了刷题的技巧,还应该了解刷题的的重要性。只有真正理解刷题对于我们的意义,才能够静下心来好好刷题、认真刷题。我们要明白刷题是取得进步的过程,是了解自我的手段,是培养自己思维能力的方法。当我们真正掌握知识点时,刷题的目的也就达到了。

⑶ 在h和poj上刷题和自己学习算法知识应该怎样结合

比如,你想学习搜索算法的话,那么你就先看看书,学习一下,之后到各oj上去刷题,刷搜索方面的题,在网上有很多给oj题目归类的文章,你就去找找,我觉得这样会很快的提高的!

⑷ 如何学好算法

算法是一个积累的过程,最现实的方法就是从题目中学算法。http://acm.h.e.cn/ 这是一个比较牛逼的网站,我想学编程的人都知道,在里面刷题目,然后看牛人的结题报告,最后做会了题目,算法自然就掌握了。重在坚持~~

⑸ 刷题怎么刷最快

刷题其实只有两个目的,一是提高熟练度,二是见识新思路,新知识点。
前者是“这道题我会但过程细节不熟所以我做”,后者是“这个类型不太熟所以我做题看看还有哪些遗漏的知识点”。
知道这两个目的后才能有效的刷题。

1。做哪里的题目?
作为刷题来说,少做整套试卷多做专题性的总结。二轮复习书是个不错的选择因为内容基本上是按知识点分类,这样做题对巩固知识点或者查漏补缺有帮助。
2。如何做题?
思考—动笔—对答案—总结。做题前一定要想这道题的“破绽”在哪,考得是哪些知识点,之前做过的某某题跟这个是不是一样的或是差别在哪里。这样的思考可以极大的提高做题效率。如果刷题的目的是前者,按照高考的答题要求每一步每一个计算做完整,对答案看看哪里可能扣分下回注意;如果目的是后者,大致写几部关键点,看看答案是不是自己的思路,是就pass。最后总结,这道题的价值在哪?有没有必要写到积累本上做专题总结?或者这道题为什么出错为什么没想到?
3。理化生三门做题有什么不同?
物理:更注重思维结构,刷题重要的是看“思路”,同一专题的几种常见解题思路务必总结。
化学:注重专题,如“实验专题”,“有机专题”等,建议刷题按实验类型刷,一些细节的操作务必注意总结。
生物:注重细节知识点。生物不建议大量刷题,重在看书掌握知识点 ,做题可为查漏补缺。

⑹ 什么叫刷题

刷题是一种在短时间内快速接触大量题目,用尽量短的时间弄懂题目和答案的意思然后解答的方法,它侧重于题目的数量而不是完成的质量。

刷题:【shuā tí】

考试通常不会出现很多原题,但是方法思路都是类似的,当刷题量到了一定程度之后,会有一种做题的惯性,当你考试看见类似的题目时,脑海里或多或少都会出现一些思路以及想法(至少大脑不会出现放空状态了)。

积极刷题,也要积极整理,把自己认为重要的:设题陷阱、答题模板、知识漏洞、课外延伸、应试技巧等整理在本子上,零碎时间翻看、考前翻看,都会有帮助的。整理后你也会发现考试命题的。

拓展资料:

刷题的具体操作方法:

1、先规定一定的答题时间,开始计时后开始做答,凭第一直觉在心中给出解题思路把要用到的公式写出来,不用计算,掐表暂停。

2、看答案,如果答案思路和自己的完全一致,那么直接跳到下一题。

3、如果答案的思路和自己的不一样,那么先记录下来,等做题时间结束后,只研究做错了的题目的解题方法。

⑺ 算法如何刷题

1、原题
我自己感觉原题的概率还是挺大的,特别是剑指offer的66题更是如此。千万别小看这66题,这几十道题里面基本所有的算法类型都有包括在内,常用的数据结构,操作方式,常用算法思路都有不少的题。

如果真的能够充分理解这几十道题的最优解,我感觉其实已经形成基本的算法思维了。

另外,leetcode的原题也很常见,因为LC本身题量大,在里面出原题不是为了考倒你,而是检验你的刷题质量。

毕竟那些大公司面试官也不是傻子,知道你在面试前肯定会大规模刷题的。所以把刷过的题完全搞懂才是最重要的。

2、改编题
改编题就很显而易见了。改编题大多需要从基本的算法原理中找到处理的思维,然后结合实际题干进行性能优化,就能够搞定。

这里要记得一点的是,正常的算法考察不会故意刁难你(正常情况),也不会给过多的时间让你思考和敲代码。

所以遇到改编题不要想得太复杂,尽量要找到它的算法思维是什么。怎么说呢,透过现象看本质。我总结的改编题有以下几种思路:

1)新的数据结构,换汤不换药。比如最常见的排序算法的改编,原来是对数字进行排序,现在对链表排序等等。比较难一点的可能会遇到自定义的数据结构。但是算法本质不会变。

2)算法类型改编。

这里要说的就是一个比较大的范围,比如动态规划、贪心算法、递归、回溯和分治等等。这种是从算法大的类型上进行改编,很难用相同的套路去解题。

遇到这类题的关键就是要先弄明白算法核心。比如动态规划的状态方程,贪心算法的局部最优情况,递归回溯的边界判断,分治的子问题划分等等。这种类型的确比较难把握,怎么硕呢,每种类型的都来搞几道感觉感觉吧。

3)添加应用题背景。

这种题目看起来不难,但是难就难在对应用题背景的理解,需要去理解题意,然后考虑合适的数据结构和处理算法。这里面有数学建模的思维在里面,需要把一堆无用的信息剔除,筛选出有效的信息,然后才能选择正确的算法。

3、创新题
这类题考察的是你的扩展思维,如果说上面的题考查的是你的思维深度,这种题就是考察算法的广度。可能一看题目,完全没见过这种类型。但是算法本身其实不就是让计算机代替人脑进行高重复性的计算嘛。

首先你需要想到你应该去怎么算这个题,然后再换到计算机上,会发生什么问题(空间时间问题,运行效率,代码冗余等等),之后再想通过经典的算法原理来解决这些

1、题型分类
按照个人的习惯,喜欢按照一种类型狂刷,然后再刷另外一种类型。一般常见的算法类型可分为:

数组、链表

包含基本排序算法、二分查找、链表的一系列操作。

栈、队列、堆

利用栈、队列互相实现,堆的使用

二叉树与图

主要是遍历算法和节点的计算:
二叉树四种遍历方式、广度优先遍历(BFS)和广度优先遍历(DFS),节点到节点距离等等。

哈希表

使用标准库自带的模板或者函数就很简单了,一般会与其它数据结构相结合来提升时间复杂度。

字符串操作

字符串的操作也很多,本质上可以看作是数组的操作。另外字符串的一些匹配和寻求字串的算法还是非常具有思考价值的。KMP,马拉车等等。

递归

重点掌握边界判断条件。

回溯

重点掌握边界判断条件。

分治

重点掌握如何划分子问题。

动态规划

题太多了,可从一阶dp到二阶dp理解不同的状态方程。

贪心及其它

这个就很容易理解了,遇到贪心题应该要偷笑了。

2、高频热点多刷
这不多说了吧,Leetcode热题HOT 100。你值得拥有。

在不知道怎么刷的情况下,不如先刷起来。刷个题没那么多捷径,只有坚持刷起来了,才会形成自己的思维方式和学习习惯。

我建议是先按照类型刷,每个类型刷十几二十道。然后打混按照算法热度排序重新查漏补缺。

3、思路回顾
许多同学在一股脑刷了很多题之后,再看做过的题会发现忘了不少。可能大家都是这样的吧。我觉得是因为在刷题的时候过于心急,理解了大概就过了,或者类型做的太杂,没有留下印象。

我比较喜欢的方式是偶尔会重新看看曾经做过的题,就看题目然后想思路,再画一画步骤演进,没时间就不细敲了。这样可以增强一下思维记忆,之前理解过的东西,再回忆起来还是非常快的。

⑻ 怎么循序渐进的学习算法算法对于程序员有什么作用

首先,对于大部分程序员而言,在工作中不是必须的,但是你要找工作,特别是刚毕业参加校招的学生,想进入一些比较大的公司(BAT之流),是必须要学好算法的。
此外,在提高自我技术水平的过程中,比如去阅读一些优秀的代码的时候,也是需要算法功底的,就像去看leveldb、redis源码的时候,起码得知道跳表是个啥吧,看Linux内核文件系统的代码得知道红黑树是个啥吧。
再就是有一个很重要的影响:算法学的好的话,不论对你思考问题的方式还是对你编程的思维都会有很大的好处。
另外关于刷题的网站还是首推Leetcode。
如果有一些算法基础的话,推荐Codeforces。
至于资料书籍的话,其实没有太多要求,网上的资料很多,随便谷歌一下就能找到很多详细的资料。
算法导论的话不推荐,不推荐初学者看。这本书是本神书,但是这本书的门槛比较高,需要有一定数学基础和算法基础的人去研究,如果你没有一定的基础或者对算法狂热的学习兴趣,你很难啃下去。
改了一下知识列表的结构,分了下类,可能更加清楚一点。这里面基础是我觉得必须应该掌握的,中等的是有如有余力最好学习的,高级的可以了解,可以了解一下,对于个别感兴趣的可以深入学习一下。

⑼ 算法到底应该怎么学

刷与不刷ACM ICPC的人在算法能力上会有巨大差距。
如果真想深入掌握各种算法,还是先刷题吧。刷到一定境界再去看更高级的算法书。
不得不承认现实生活中,一般码农工作对算法能力要求太低了,这一度让人们(包括我)认为算法似乎不那么重要。其实学习算法所锻炼出来的对各种问题敏感的反应和融会贯通能力还是非常重要的。
编程嘛,就是操作数据输出结果
算法和数据结构是配套的,你应该掌握的主要内容应该是:
这个问题用什么算法和数据结构能更快解决
这就要求你对常见的结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。
对你不懂的数据结构,你要去搜它主要拿来干嘛的,使用场景是什么。
细节出错是你对编程语言不熟悉才会导致的问题,跟你懂不懂算法没关系,这个你应该多写写练手小程序,背代码是很愚蠢的行为。
其实我觉得你这么迷茫不如实现一下stl的函数好了
我的经验就是去模拟(当然模拟只限于基础的算法)。甚至是手动模拟,比如我之前学深搜,学递归,代码很简单,但是因为涉及到栈,而你的大脑短时间内存储的栈深度只有几层(临时变量越多你大脑能模拟的栈深度就越少),实际上你没办法用大脑去想。比如学习图的深搜,一开始我是不理解的,对递归没办法理解。后来我就在纸上模拟出来,建立好邻接表以后,按照代码步骤一步步纸笔来模拟,慢慢就知道了代码的工作过程。你学习快排也是,当然你背代码也能写出来,但是可能不理解,很快就忘了。《算法导论》书上就有比较细致的执行过程,你手动模拟下partition和quicksort的过程,一开始就用很简单的用例,把整个过程都手动执行一遍,慢慢就了解了。很多算法都有一个循环不变式,你代码如果逻辑正确并且能够维持循环不变式,一般写出来就是正确的。
建议找本《算法》或者《算法导论》这些教材,每学习一个算法就先大致浏览下, 然后细致分析每一步代码的执行过程(纸笔模拟或者代码单步调试),当确认你真正明白之后,尝试不看代码就靠对算法过程的了解和正确的逻辑去自己实现。
当然,我不认为你写出很多算法就是高手了,现在大部分高级语言不需要你重复造轮子,你造出来的质量也远逊于库中那些高手的代码,可以去学习他们代码的实现,比如看看stl源码。真正工程用到的代码与一般算法实现还是有很多改进的。
最重要的不是你会写这些算法了,而是学会了很多思想。比如二分的思想,递归的思想,分治的思想,动态规划,贪心等,以及现实中很多数据结构的抽象等。难的不是学会了算法,而是如何运用这些算法思想去解决问题。

⑽ 做为一个初学者,如何才能学好算法呢,感觉自己很菜

凡事都讲究动机,你学习算法的目的是什么呢?目的不同,学法不同侧重不同。
如果你是准备跳槽,以面试为目的,可以先从cracking the coding interview入手,题目是按照链表,树图,递归这种章节安排的,每章都有题目,难度适中,第一遍自己写不出来很正常,画图分析,然后再做第二遍,第二遍就快很多,理解也深刻了,实在理解不了的算法,没办法,背吧,说不定到后面不知什么时候就理解了,所谓读书百遍,其意自现,算法也一样。
如果你是半路出家的程序员,看书觉得看不下去,可以试着看看视频,现在网络这么发达,网上有很多免费的精品视频,比如潭州教育老师的数据结构以及清华邓俊辉老师的数据结构都是特别好的课程。
最后一种就是你对算法理论和精髓确实感兴趣,且有一定的数学功底,你可以尝试研究下《算法导论》,甚至《计算机程序设计艺术》(反正我是看不下去)。
其实,无论出于哪种目学习算法,其实最重要的一点就是:多编程实践,多思考,这是废话,但这也是真理。

阅读全文

与算法和刷题的思路相关的资料

热点内容
ubuntu压缩zip 浏览:2
vigenere算法的方法是什么 浏览:666
pdf保护破解 浏览:341
仿微信聊天系统源码广州公司 浏览:106
怎么查看我的世界服务器日志 浏览:430
怎么从程序员走到成功 浏览:824
把软件放入文件夹中如何移出 浏览:209
红包源码企业即时聊天软件 浏览:581
xp安装python 浏览:10
西门子参数编程读取半径值 浏览:403
洗首饰解压小视频 浏览:966
01背包问题的算法解决 浏览:373
sd卡放哪个文件夹 浏览:301
解释器模式java 浏览:104
android垂直自动滚动条 浏览:153
计算器java小程序 浏览:27
java的简称 浏览:68
云服务器公网ip地址 浏览:581
php对数据库操作 浏览:237
java爬图片 浏览:868