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

本人是准备考研的学生,目前在自学数据结构(C++描述)。感到算法的编写是最吃力的。见到一个新的问题,往往没有思路,抑或是思路很混乱(尤其是涉及循环问题的时候)。请不必建议... 本人是准备考研的学生,目前在自学数据结构(C++描述)。
感到算法的编写是最吃力的。见到一个新的问题,往往没有思路,抑或是思路很混乱(尤其是涉及循环问题的时候)。
请不必建议我多阅读算法,理解吃透。见过的算法我是的确一句句分析过的,但是感觉还是没有多大长进。
请编程高手指教:我该怎样做才能有一个质的飞跃呢?你们当年初学编写算法的时候又是怎样“涅磐”的呢?请不要从网上大片摘抄,需要的是高手自己的经验和见解。谢谢了!:)
PS: 1.我所指的是,编写小算法的思路,也就是如何构建它的框架。
并非我不知道要先画流程图,也不是做很大的项目。
只要有了一个很清晰的思路,,别的都不是问题。
所以想听听高手对于培养这种思路的经验和建议。
2.对于一道编写算法的题,在读正确答案之前,我都有认真思考的过程,但是思路就是很混乱。并非我只是单一的读别人的算法,而不亲自动手去做。
展开
 我来答
bob0103
推荐于2017-09-11 · TA获得超过4514个赞
知道小有建树答主
回答量:881
采纳率:81%
帮助的人:330万
展开全部

    选一本出色的教材.有条件就看英文的,然后给自己一个环境,例如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节,讲了排序算法的实际用途,这本书不光告诉你算法的原理,还告诉你算法的用途。

sanshizi
2008-08-15 · TA获得超过448个赞
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:322万
展开全部
"对于一道编写算法的题,在读正确答案之前,我都有认真思考的过程,但是思路就是很混乱"这是很正常的,再猛的高手遇到问题也不会一目了然的,要有一个整理思路的过程,画框图是一个很好整理思路的过程,思想混乱说明你的思维比较敏感,对每一个问题都会不由自主进行一下发散思考,太多的分支结果导致混乱,就像你进入了一个出不来的递归一样,说了这么多费话,想要表达的意思就是说,只要你不断的去写code,你会发现你在不知不觉中思路就清晰起来了,比如编一个聊天室,你立刻就会知道大体需要哪几个模块,当你自己很彻底地编出一个聊天室了,再去写一个像QQ里面在线纸牌游戏的时候,思路就会立刻清晰起来,因为他们的原理差不多,只不过纸牌客户端复杂一点而已,又说了一堆费话在,我是想说,当然只是个人观点,经验在编程过程中是非常重要的,所以你的混乱的问题不是问题,加油

=====================================================================

偶不是专业写程序的,目前自学写点程序只是兴趣,所以水平有限,只是自身的一点感受。

1 程序事例,有代表性的看一点就够了,
2 一门语言的语法基础的东西要非常熟练
3 闭门造车,自己写程序,写属于自己的程序,写一些小游戏,如果不会就从最简单的开始写,10以内的乘法口决,各种常见的数学计算公式实现(如阶乘),计算器,猜数字,扫雷,等等等等

总之,只有自己写了,才会有自己的思路,你读别人的程序就是像背诵别人的文章,如果不写自己的文章,永远也不会有自己的风格
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
o0御剑江湖0o
2008-08-14 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:0
展开全部
我觉得,想要精通算法必须要重视实践,就是要把所有的经典算法都亲手实践,而且在这个过程中是不能查阅书本的,尽量做到熟练,这样才能够提取出这个算法的精髓,并且能够应用自如,数学肯定是一个基本功,像高数,线代,离散数学,组合数学,运筹学最好都涉及并且做到精通,做ACM比赛的基本功要求是出现的经典算法,像堆排,快排,最小生成树,佛洛依德等等都要反复打30多遍,这样就能做到真正的熟练了,有了良好扎实的基本功再加上以后再多看看新颖的算法,就能真正掌握了,其实混乱的思路还是因为对经典的算法没有完全掌握,看懂和写出来是完全不同的,我的经验是看《算法导论》+在OJ上做题,总之实践是很重要的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishijun1234
2008-08-12 · TA获得超过195个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:82.3万
展开全部
我个人认为,所有的算法都是来源于数学的。如果你真要学习算法的话,首先要学好数学。这是我个人的经验。无论以后做分析,还是做开发。即便是要定义一个数组,也离不开数学的知识。
数学学的好,在解决问题的时候就会有更多的思路,也就是算法。
我是个C#的程序员,现在也在努力学习数学中。
希望对你有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
安徽新华电脑专修学院
2018-11-13 · 百度知道合伙人官方认证企业
安徽新华电脑专修学院
安徽新华电脑专修学院始建于1988年,隶属于新华教育集团,是国家信息化教育示范基地、中国 IT 教育影响力品牌院校.
向TA提问
展开全部
随机函数一种思维是获取电脑时间的毫秒值,再根据这个值做下处理,这样就可以生成随机数了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式