发布网友 发布时间:2022-10-01 09:49
共5个回答
热心网友 时间:2024-11-24 01:04
刷与不刷ACM ICPC的人在算法能力上会有巨大差距。
如果真想深入掌握各种算法,还是先刷题吧。刷到一定境界再去看更高级的算法书。
不得不承认现实生活中,一般码农工作对算法能力要求太低了,这一度让人们(包括我)认为算法似乎不那么重要。其实学习算法所锻炼出来的对各种问题敏感的反应和融会贯通能力还是非常重要的。
编程嘛,就是操作数据输出结果
算法和数据结构是配套的,你应该掌握的主要内容应该是:
这个问题用什么算法和数据结构能更快解决
这就要求你对常见的结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。
对你不懂的数据结构,你要去搜它主要拿来干嘛的,使用场景是什么。
细节出错是你对编程语言不熟悉才会导致的问题,跟你懂不懂算法没关系,这个你应该多写写练手小程序,背代码是很愚蠢的行为。
其实我觉得你这么迷茫不如实现一下stl的函数好了
我的经验就是去模拟(当然模拟只限于基础的算法)。甚至是手动模拟,比如我之前学深搜,学递归,代码很简单,但是因为涉及到栈,而你的大脑短时间内存储的栈深度只有几层(临时变量越多你大脑能模拟的栈深度就越少),实际上你没办法用大脑去想。比如学习图的深搜,一开始我是不理解的,对递归没办法理解。后来我就在纸上模拟出来,建立好邻接表以后,按照代码步骤一步步纸笔来模拟,慢慢就知道了代码的工作过程。你学习快排也是,当然你背代码也能写出来,但是可能不理解,很快就忘了。《算法导论》书上就有比较细致的执行过程,你手动模拟下partition和quicksort的过程,一开始就用很简单的用例,把整个过程都手动执行一遍,慢慢就了解了。很多算法都有一个循环不变式,你代码如果逻辑正确并且能够维持循环不变式,一般写出来就是正确的。
建议找本《算法》或者《算法导论》这些教材,每学习一个算法就先大致浏览下, 然后细致分析每一步代码的执行过程(纸笔模拟或者代码单步调试),当确认你真正明白之后,尝试不看代码就靠对算法过程的了解和正确的逻辑去自己实现。
当然,我不认为你写出很多算法就是高手了,现在大部分高级语言不需要你重复造轮子,你造出来的质量也远逊于库中那些高手的代码,可以去学习他们代码的实现,比如看看stl源码。真正工程用到的代码与一般算法实现还是有很多改进的。
最重要的不是你会写这些算法了,而是学会了很多思想。比如二分的思想,递归的思想,分治的思想,动态规划,贪心等,以及现实中很多数据结构的抽象等。难的不是学会了算法,而是如何运用这些算法思想去解决问题。
热心网友 时间:2024-11-24 01:05
算法入门要看那几本经典的书,但是进阶的话要看一个人的聪明程度和综合各种学科的知识的能力。说到底遇到新情况你就没有书可以照搬了,这时还是看人聪明不聪明:
我记得大一学校有个什么数学建模班,作为考试入班需要提交一个程序解一大堆应用题中的一个。彼时算法课计算机系还没有教,其他系更不用说。但是还是有各种人物用自发明的各种算法加上自学的C和C++把各种问题都啃下来了。不用任何框架直接C++/COM加3D碰撞检测的DirectX游戏照样有人做出来,还不是计算机系的。我那时觉得已经到我脑力极限的DirectX/OpenGL英文手册在他看来和日漫一样简单
热心网友 时间:2024-11-24 01:05
算法对于程序员来说是比较难的,特别是那些经常写CRUD的工程师,不过算法是程序员的必备技能,学习算法可以从基础的开始(算法跟数据结构是搭配的,很多算法是需要特定数据结构的支持)热心网友 时间:2024-11-24 01:06
我感觉要先把数学学好热心网友 时间:2024-11-24 01:06
学算法其实是学思想