怎么写算法思想( 四 )


拥有贪心算法思想的人肯定不是一个战略家,因为他只注重当前利益 。不过拥有贪心算法思想的人肯定是一个最开心的人,因为他得到的总是当前最好的 。
在这个世界上,我想大多数人和我一样贪心 。回溯法和分支界定法 。
这两个算法是体现try思想最明显的了 。不就是解决问题吗,我去先去按这条路走一走,走不通,再试一试走另一条路,呵呵,走通了,这个方法是最好的方法吗,还有没有更好的,在去试,试,试,呵呵,找到一个更好的方法,难道人生不是这样的吗?不过有一点要注意,不要盲目的试,要学会在试之前对这种方法进行判断,如果明显不行,就没有必要再试了,以免浪费时间 。
虽然人生如算法,可是千万别严格的按照算法去生活,当你每天一成不变的按照你计算的从家到公司最近的线路来来回回的时候,不妨偶尔绕绕路,你会发现不同的风景,毕竟,我们是在生活,不是在做算法考试,不会因为没有达到最优而扣你的分:) 。
6.请教编程高手:如何培养编写算法的思路选一本出色的教材.有条件就看英文的,然后给自己一个环境,例如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节,讲了排序算法的实际用途,这本书不光告诉你算法的原理,还告诉你算法的用途 。