Ⅰ 算法导论多久学完
大约一年,,看情况
Ⅱ 如何学好算法与程序设计
由于我是学习计算机软件专业的,因此关于如何学好该门课程的问题,我的亲身体会是:在编写程序源代码上,首先必须至少做到:能够利用程序设计语言自如地编写出自己想让电脑完成的事情(即程序源代码)。这个是第一步的。
其次,在达到上面第一步之后,就必须要尽量多学习一些计算机软件专业的课程了(例如:数据结构及其计算机算法),但是这门课程就是重中之重了。你即使暂时不学习其他的计算机专业基础课程(例如:高等数学、高等代数、离散数学等),数据结构及其计算机算法也必须是要学习的。因为它是影响到你今后编写出来的源程序,其程序运行效率高低、内存优化等的理论基础。
至于说学好了各门数学课程,主要是为了将来在编写计算机软件时,建立适当的数学模型的过程中必须用到的。
最后我要说的一句话就是:如果要想达到这个境界,那么没有什么捷径可走,只能够是依靠平时多上机编写、调试大量的程序、以及在平时编程的过程中注意积累丰富的编程经验。
只有这样,才能够真正学习好算法与程序设计这门课程。
Ⅲ 《算法分析与设计》课程讲什么内容
《算法分析与设计》课程是理论性与应用性并重的专业课程。本课程以算法设计策略为知识单元,系统地介绍计算机算法的设计方法和分析技巧。课程教学主要内容包括:第一章,算法概述;第二章,递归与分治策略;第三章,动态规划;第四章,贪心算法;第五章,回溯法;第六章,分支限界法。通过介绍经典以及实用算法让同学掌握算法设计的基本方法。结合实例分析,让同学深入理解算法设计的技巧,以及分析算法的能力。
Ⅳ 新手自学一本《c语言程序设计》多久能学完
其实C并不难 关键你得找个适合自己的材料 如果是自学的话 以我自身经历来看 感觉看视频比看书效率高 毕竟理科知识不像是文科的 看书效率太低了 可能一个很简单的知识点 自己看书得半个小时 但是懂的人就讲几句话 就能明白了 所以相比之下 还是视频效率比看书高 选择个适合自己的就能学懂C了 我当初看的是夏老师的 感觉挺适合我这样初学者的 他讲的不繁琐啰嗦 都是重点 而且思维原理讲的最好 能让我理解 我感觉这点很重要 比之前看的什么郝斌曾怡金文的那些繁琐啰嗦听不出重点的好多了
Ⅳ 算法该如何学习
我的研究生生涯绝对是一个反面典型——翘课,实习,写水论文,做水研究,但有一点我颇为自得——从头到尾认真听了韩军教授的算法设计与分析课程。
韩军给我印象最深的有两点:课堂休息时跑到外面和几个学生借火抽烟;讲解算法时的犀利和毫不含糊。
尽管韩军从来没有主动提及,但我敢肯定算法设计与分析基础就是他算法课程事实上的(de-facto)教材,因为他的课程结构几乎和这本书的组织结构一模一样。
如果数据结构与算法分析——C语言描述是我的数据结构启蒙,那么韩军的课程和算法设计与分析基础就是我的算法启蒙,结合课程和书籍,我一一理解并掌握了复杂度分析、分治、减治、变治、动态规划和回溯这些简单但强大的算法工具。
Ⅵ 我目前在自学算法,但是我感觉很吃力啊。有时候一个稍微复杂的算法,想很久都不能明白。希望前辈们给点建
复杂算法难理解是肯定的
比如波利亚计数定理,就算我写出程序了也没有完全理解
其实弗洛伊德最短路算法也挺难理解的
可以自己先试着解答题目,然后再去看算法
或者debug,单步调试看看算法是怎么工作的
Ⅶ 如何设计算法
设计一个正确的算法是一件困难的工作,因为它需要创新,从以太真空中发掘出一个解方案来解决问题。算法设计比对现有的方案进行改良要难得多,因为算法设计的可选择空间太,过多的自由反而成了一种约束。 This book is designed to make you a better algorithm designer. The techniques presented in Part I of this book provide the basic ideas underlying all combinatorial algorithms. The problem catalog of Part II will help you with modeling your application and point you in the right direction of an algorithm or implementation. However, being a successful algorithm designer requires more than book knowledge; it requires a certain attitude, the right problem-solving approach. It is difficult to teach this mindset in a book; yet getting it is essential to become a successful designer. 本书的设计目标是让你成为一个更好的算法设计者。本书第一部分展示有关组合算法的基本原理和基本思想;第二部分的问题清单帮助你为你的问题建模,并且为你指明实现正确算法的方向。尽管如此,要成为一个成功的算法设计者光有书本知识是不够的,面对问题的态度(attitude)和选择正确的方法更重要。书本容易传授知识,很难传授人的心态(mindset)和思考方式;而这种心态和思考却是成为成功的算法设计者的根本条件。 The key to algorithm design (or any other problem-solving task) is to proceed by asking yourself a sequence of questions to guide your thought process. What if we do this? What if we do that? Should you get stuck on the problem, the best thing to do is move onto the next question. In any group brainstorming session, the most useful person in the room is the one who keeps asking, ``Why can't we do it this way?'' not the person who later tells them why. Because eventually she will stumble on an approach that can't be shot down. 算法设计(或其它问题解决任务)的关键是一系列持续的自我反问,这些反问引导我们思维的前进。“如果这样做会怎样?”,“如果那样做又会怎样?”……如果 你被一个问题掐住了,最好的办法就是先搁一下,换一个问题换一个前进的方向试试。在每组头脑风暴会议中,最有价值的人是不断提出为什么的人,不是尔后解说为什么的人。因为我们常常被一些习以为常的东西所拌倒,掉进自己设置的陷阱。 kemin:如果问题解决是一种思考过程,那么思考的形式(过程的严谨性、细致性和正确性)很重要,而思考的内容也不容忽视。因为引导我们思考前进的方式 除反问本身外,反问的内容也很重。就比如参加头脑风暴的材料一样。人大脑的思维功能是硬编码的,人与人之间没有思维规律——质的区别,只是思维的清晰度和 灵敏度——量的差别。人与人之间智力的差别更多体现在思维内容的量上,体现在对外部世界的事实掌握的广度和深度上。 Towards this end, we provide below a sequence of questions to guide your search for the right algorithm for your problem. To use it effectively, you must not only ask the questions, but answer them. The key is working through the answers carefully, by writing them down in a log. The correct answer to, ``Can I do it this way?'' is never ``no,'' but ``no, because ....'' By clearly articulating(明确有力地表达) your reasoning as to why something doesn't work, you can check if it really holds up or whether you have just glossed(掩盖) over a possibility that you didn't want to think hard enough about. You will be surprised how often the reason you can't find a convincing(使人信服的) explanation for something is because your conclusion is wrong. 在末尾我们提供一个反问问题的列表,你不但要反问自己这些问题,更重要是仔细回答这些问题,最好把答案写下来。回答诸如问题“我可以使用这种方式吗?”的 不是一个“不能”就完了,而是“不能,因为……”。通过仔细明确的回答“为什么不能”时,你会发现到底是“真的不能“,还是只是你自己不愿意去深入思考掩 盖了”能“。如果你不曾训练出严谨的思考方式,当你这样做时你会惊讶的发现,为了说明某些东西但却找不到一个令人信服的解释的原因常常是因为你的结论本身 是错的。 An important distinction to keep aware of ring any design process is the difference between strategy and tactics(战略). Strategy represents the quest for the big picture, the framework around which we construct our path to the goal. Tactics are used to win the minor battles we must fight along the way. In problem solving, it is important to check repeatedly whether you are thinking on the right level. If you do not have a global strategy of how you are going to attack your problem, it is pointless to worry about the tactics. 在设计过程中特别重要区分策略和战略的概念。策略是对全局的一个探索,一个构筑通向目标路径的指导框架。战略则是用来解决通向大目标过程的较小的问题。如果你对关于如何对付所面临的问题没有一个全局的策略,那关心战略是不得要领的,予事无补的。在解题领域,不断修正思维的层次(thinking on the right level)是很重要战略。(--莱布尼兹曾经将人的解题思考过程比喻成晃筛子,把脑袋里面的东西都给抖落出来,然后正在搜索的注意力会抓住一切细微的、与问题有关的东西。事实上,要做到能够令注意力抓住这些有关的东西,就必须时刻将问题放在注意力层面,否则即使关键的东西抖落出来了也可能没注意到。) An example of a strategic question is, ``How best can I model my application as a graph algorithm problem?'' A tactical question might be, ``Should I use an adjacency邻接 list or adjacency matrix data structure to represent my graph?'' Of course, such tactical decisions are critical to the ultimate quality of the solution, but they can be properly evaluated only in light of a successful strategy. 一个策略问题的例子是:“我如何才能更好地把我的问题建模成图问题?”。而一个战略问题可能是这样:“我是用邻接列表还是邻接矩阵来实现我的图结构?”。当然,这种战略选择是对解决方案的最终质量起着重要作用;不过战略价值的体现还是基于正确的策略的选择。 When faced with a design problem, too many people freeze up in their thinking. After reading or hearing the problem, they sit down and realize that they don't know what to do next. They stare(凝视) into space, then panic(惊惶), and finally end up settling(沉淀; 决定) for the first thing that comes to mind. Avoid this fate(天数; 运气; 命运 ). Follow the sequence of questions provided below and in most of the catalog problem sections. We'll tell you what to do next! 初学者在面对问题时常常表现出思维凝滞、手足无措和盲目解题。参考以下的反问问题列表和本书的问题清单,我们告诉你应该怎么做。 Obviously, the more experience you have with algorithm design techniques such as dynamic programming, graph algorithms, intractability, and data structures, the more successful you will be at working through the list of questions. Part I of this book has been designed to strengthen this technical background. However, it pays to work through these questions regardless of how strong your technical skills are. The earliest and most important questions on the list focus on obtaining a detailed understanding of the problem and do not require specific expertise. 当然本反问问题列表对读者有背景要求,要求读者对算法设计技术(动态规划、图算法、难解性和数据结构)的熟悉程度。本书第一部分的目标就是对这些技术背景进行强化。不过,不管你的技术背景怎样,通读这些问题对你解题还是很有裨益的。
Ⅷ 算法的常用设计方法有哪些
算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。
另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。
Ⅸ 零基础学java 一般要学多久
要想学好Java,应该注重以下几个方面入手。
1、正确理解Java的各种“抽象”。学习Java就是学习各种“抽象”,包括类、接口和抽象类等,不同层次的抽象意味着不同的作用。
对于初学者来说,要想正确的掌握各种抽象,应该从基本的Java编程过程开始,包括类的设计、对象的创建和方法的调用,另外要重点学习一下多态的使用。多做实验是理解各种抽象的好办法,因为实验往往能够为初学者建立起概念的“画面”,从而辅助理解。
2、学好集合框架。Java描述复杂数据结构的主要方式是集合框架。Java没有指针,而是通过强大的集合框架描述数组、对象数组等复杂的数据结构。
学好这些数据结构的描述方法对于应用程序编写,特别是涉及到服务器方、3层结构编程至关重要。程序员在这个时候不能再用诸如数据库结果集之类的结构描述数据了。
由于很多语言没有这么强大的集合框架体系,很多初学者不知所措,更不知道拿来做什么用,因此应该引起足够的重视。
3、注重知识结构的全面性
学习Java开发的过程中要系统地学习一下操作系统、计算机网络、数据结构、算法设计和数据库知识,这些计算机基础内容对于学习Java具有重要的意义,如果想在Java开发领域走得更远,一定要注重基础知识的学习。
在学习期间建议使用Linux操作系统开展实验,未来很多Java开发都离不开Linux操作系统,比如大数据应用开发、物联网平台开发等。
4、确定一个主攻方向
Java目前主要的应用领域包括Web开发、Android开发和大数据开发,不少网络服务也需要采用Java完成后端功能的编写,另外Java也是研发级程序员的常见工具,涉及到一些平台和容器的开发,比如大数据平台Hadoop就是采用Java语言编写的。
对于Java初学者来说,要根据自身的知识结构和兴趣爱好,选择一个适合自己的主攻方向。一般系统学习在千锋时间在5-6个月。
Ⅹ 如何学习算法
个人觉得,世界上的算法多如牛毛,要想全部系统地学习恐怕是不大可能的。只有一边学编程一边自己总结。当然典型的一些算法还是要记下来的。比如最基本的排序等,以及稍微高级点的求最段路径等。