本文力荐 | 28天玩转算法训练营02期
首图 | 何塞·维莱加斯·科尔德罗
编辑 | 林瑟
程序员都知道的三本算法书《算法》、《算法导论》、《算法图解》,但真正能读完的人少之又少。比如:
“看了半年的《算法》这本书,才看了几十页”
“4 年了,还是没有啃完《算法导论》”
有的朋友对各种排序、搜索、遍历等常用算法了如指掌,但遇到实际问题时还是束手无策。
所以,我主张大家用“玩”的思想来学习算法,“玩算法”就是要能够做到以下三点:
1、对遇到的特殊问题能够自己设计出算法实现(可能是竞赛的题目,也可能是工作中遇到的实际问题);
2、对于原理公开的知名算法,要能将算法原理翻译成具体的算法代码
3、对已有具体实现的算法,要能够设计出合适的数学模型,将算法应用到实际问题中。
要想做到以上三点,除了熟练掌握各种常用的基础算法外,还需要了解算法设计的常用思想模式,掌握将题目转换成数据模型,再进一步用数据结构实现数据模型的一般方法。
如果你觉得学习算法困难,是因为你没有掌握算法的设计模式。这里我也准备了一份入门测试题,都是与算法相关的基础知识点,每道题下方都有正确答案,大家可以点击查看,希望能通过这份测试题让你看到自己的欠缺之处,查缺补漏,学习更有针对性。
1、求最优解的常用算法模式有哪些?(请至少列举两种)
(点击空白处查看内容)
▼
答案:穷举法、贪婪法、动态规划法等,答对两个即可。
2、A 算法的时间复杂度是 O(n2),B 算法的时间复杂度是 O(n),说明 B 算法的运算速度快。(判断题)
(点击空白处查看内容)
▼
答案:错。
3、在 Java 或 C++ 编程语言中,可以直接用 == 来判断两个浮点数相等吗?为什么能(或不能)?
(点击空白处查看内容)
▼
答案:不能,因为浮点数在计算机内的表达有误差,直接用 == 判断两个浮点数是否相等是不安全的。当然,对于能够精确表达的浮点数,比如 0、0.5(1/2)、0.25(1/4)等浮点数,用 == 判等是没有问题的;其他情况,用 == 判断两个浮点数是否相等可能会得到意想不到的结果。
4、无序的一维表查找时间复杂度是什么,有序的一维表查找时间复杂度又是什么?
(点击空白处查看内容)
▼
答案:无序表的查找时间复杂度是 O(n),有序表的查找时间复杂度是 O(logn2)
5、迭代法的三要素是什么?
(点击空白处查看内容)
▼
答案:迭代变量、迭代递推关系和迭代终止条件
6、动态规划的子问题和分治法的子问题在要求上有什么区别?
(点击空白处查看内容)
▼
答案:动态规划的子问题有“无后向性”要求
7、分治法只能用递归方式设计程序实现(判断题)
(点击空白处查看内容)
▼
答案:错
8、Dijkstra 算法是用来求解什么问题的算法,与之类似目的的算法还有哪些?
(点击空白处查看内容)
▼
答案:Dijkstra 算法是求最短路径的算法,与之类似目的的算法还有 Floyd 算法,A* 算法等。
这 8 道测试题均摘自我的《28 天玩转算法训练营》,同时,以上提到的算法只是本次算法训练营的部分课程内容,推荐大家订阅 02 期算法训练营,学习系统全面的算法知识。
扫码了解算法训练营
▼
当然一个人不可能看几篇文章就能全面掌握各种问题的解决方法,这种能力其实就是经验和方法集的问题,多练习、多思考,学会总结和归纳,是提高解决实际问题的关键。
在 GitChat 02 期算法训练营中,我讲解的算法实例基本覆盖了各种算法比赛中经常出现的题目以及工作中常见的一些有趣的算法实例。在算法实现的过程中,还会详细介绍针对各个问题的建模过程,让你在学习之后能举一反三,以后遇到类似的问题,可以自己设计并实现解决问题的算法。
训练营学习方式
图文课程学习+班级群讨论+高强度课后题实战+助教1V1督学+老师解答各种疑难问题,由助教老师全程带班。
训练营学习时间
训练营周期 5月27日-6月23日,正常学习周期为 4 周左右,课程购买后一直可看。
训练营助学奖励
开营礼包(内含 20 元课程代金券)
全勤奖(99 元助学金返现)
优秀学员奖(199 元助学金返现)
训练营报名须知
购买后一定记得添加助教-梦梦微信
本期报名截止:2019.05.26
本期开营日期:2019.05.27
本期结营日期:2019.06.23
限购名额:200 人
训练营课程为图文+社群学习形式
训练营课程为虚拟商品,一经付费概不退款,敬请谅解
参加了算法训练营之后你会发现,算法并非是枯燥、抽象的代码,算法的设计和应用是一件十分有趣的事情,学习之后觉得意犹未尽。点击阅读原文抢座报名,现在报名还能享受优惠价格哦!