10月1日《面试算法·国庆班》课程 FAQ

题按:算法班我已经锤炼过15+期(完整分享还包括线下4次,大学课堂2次),除了算法本身的讨论、代码的实现,会尽量多的阐述算法思维和建模思想——即解决“为什么这样,而非那样”的问题;我是希冀做成全网最好的算法课程,没有之一。
 《面试算法·国庆版》的拼团,大家私信我的疑问比较多,我把常见问题整理下来,大家如果仍然有疑问,欢迎跟帖提问(问题是没有先后顺序的,被问到2次以上,我就追加到最后):
 
1、该班使用什么语言?C还是C++?
答:由于我个人的技术方向,我不是太区分C和C++。大体说来,大多数是使用C来完成的。但有些算法增加几个类和成员变量,可能代码实现更具条理,就会使用C++;而有些算法略繁杂,如八皇后问题、数独、马踏棋盘以及深度搜索等,这些算法会使用C++提供的排序、队列、堆栈、集合(即STL)等内容。
2、课程会提供源码吗?
答:本次国庆班的特征之一,是提前1周把下周要用的算法代码放在官网,大家可以提前做些预习/复习工作,提高大家的听课质量;我个人是使用VS.NET的C/C++编译器完成的。
3、如果不会C/C++语言能听懂吗?
答:只要会任意一门计算机语言(C/C++/Java/PHP/Python/Matlab/R等等),都没问题。课程的重点是建立算法思维,并能够在实践中解决问题。
4、会讲快速排序吗?如果讲,掌握它又有什么意义呢?各种软件包都可以直接调用啊。
答:课程中肯定会讲快速排序,并且不只在一个章节(在链表、查找排序、海量数据等都会涉及这个算法)。
我认为学习算法课程至少有四个目的:理解了算法的来龙去脉,(1)可以更好的运用算法,根据实际的需要灵活调整成最符合实践的做法,不至于产生“黑盒子”的神秘感和心里胆怯;(2)掌握某个算法后,可以用于更多实际问题的解决。如掌握了堆排序和快速排序,可以用于设计TopK问题;再比如“格子取数/走棋盘问题”,虽然是教科书级的经典问题,但可以用于“三维曲面连接”这一实践问题。(3)有些实践问题是不明显的,需要学习能够把实际问题转换成经典问题的能力,这也是算法课程的重点之一(这往往是最重要的);(4)从功利的角度看,笔试面试总是会考算法啊(真相了)。
5、课程的主要内容涉及哪些内容?我本科和硕士期间两次学习过算法,但有些内容不太清楚了,看课程的目录觉得内容很多,能简单梳理下课程大纲吗?
答:面试算法班以两条线组织内容:(1)根据数据结构分类,分章节系统讨论数组/字符串/链表/堆栈/队列/树/图等内容在实际问题中的应用,(2)根据算法类别,讨论分治法/递归/图论实践/动态规划/排序搜索/海量数据/系统设计等内容。课程内容尽量由简入难安排,但也不完全一定(比如,“备受瞩目”的KMP算法其实蛮绕的,但它属于字符串章节,第2次就会讨论)。
6、算法实现为什么用C/C++,提供Java版本的代码实现么?
答:只是我个人的习惯而已。机器学习我用Python实现;算法班我用C/C++实现;但其中实际工作中我是用Java做工程。语言是为了实现我们的想法,是工具。此外,一般认为,C/C++也是做精致算法的首选语言,课程中没有Java版本的代码,如果非常希望有Java实现,可以类似《面试算法·1期》那样,大家自组织成立“算法班Java实现小组”。
7、为什么课程题目带一个“面试”的定语?
答:之所以加上“面试”,是因为在算法班中的很多例题,来自于我整理的近年来一线和准一线、二线IT公司的笔试面试题。课程中通过实际中被广泛关注的算法题目,也能够做到有的放矢,不至于陷入过难、过于理论的算法内容。
对了,每次的2个小时其实满满当当的,课程中不讲面试技巧等非技术问题。
8、课程中有配套教材或参考文献吗?
答:一般而言,看《算法导论》就够了。但不要被书名中的“导论”所误导——这决不是一本简单的书,甚至我觉得某些地方的证明过于严(hui)格(se)了。但它一定是最好的算法参考文献,非常值得有精力的情况下仔细阅读。
9、为什么面试的时候经常考算法?
答:经常考算法的原因,我认为除了第6问中给出的前3条解释“算法很重要”以外,还有一个原因是:如果被面试者以往的项目经验和新公司并不契合(或者刚刚毕业的学子,本来就没有太多项目经理经验),那么考察算法最容易判断该面试者能否胜任新工作。
另外,公司发现一个关联:如果一个人算法好,那么他解决实际问题的能力往往不算太差。掌握算法,一来可以提高算法思维和编程水平,二来可以灵活运用算法到其他场景中。
10、现在拼团的《面试算法·国庆版》和前面的《面试算法》1期/2期有区别吗?我拼团参加了1期/2期的课程了,还需要报国庆版吗?
答:《面试算法·国庆版》每一次的内容会根据大家反馈、实践要求、社会热点等情况做内容迭代,国庆版做了10+个更新,大体包括:
(1)BAT笔试面试真题
(2)博弈论
(3)中文分词
(4)红黑树与跳跃表
(5)深化动态规划
(6)详解深度搜索
(7)遗传/蚁群算法
(8)循环不变式的应用
(9)算法的角度看概率
(10)倒排索引与POI的应用
(11)海量数据与系统设计
(12)Manacher算法及其应用
(13)Trie树双数组结构的应用
(14)A*算法及启发式搜索的其他应用
(15)BloomFilter理论与实践
同时,前面15+积累的受大家关注的内容仍然保留,如:
(1)详解递归和分治
(2)启发式搜索
(3)代码级详解跳跃表
(4)深度优先搜索的实践应用
(5)动态规划和广度优先搜索的深刻理解
(6)图论中的基础代码
(7)动态规划中滚动数组的应用
但总体而言,内容迭代还是不少的——即使这样,个人认为报过1期/2期,不必再报国庆班(毕竟要有199元费用呢)。
11、我主要来学学算法,学学思想。
答:是的,其实不少的朋友来报班,没有明确的目的,只是为了做知识技术储备的。毕竟算法作为基础之一,几乎永不过时(但会随着硬件的发展而变化,如并行计算)。
12、我学习完《面试算法·国庆版》,是不是就可以找(换)工作了?
答:我可以保证的是:掌握咱们课程中的70%以上的内容,则在面试和实际工作中,基本上不会在遇到算法相关的困难。算法班我已经讲过15+期,我是希冀做成全网最好的算法课程,没有之一。
13、我看到还会讲遗传/蚁群算法,我平时用不上啊。
答:当然不可能我们学的所有内容在实际中都直接用上。但任何学科都有一个“广度”和“深度”的问题,了解些看似与当前工作不十分相关的“周边技术”,提高综合能力。比如,我们会讲Huffman编码的原理和代码实现,我们完全可以以此为索引,把其他压缩编码问题、二叉树节点数量关系、优先队列的应用、前缀编码等诸多问题都纳入其中。比如咱们的姊妹班《机器学习》中,密度聚类等代码实现,我就是使用并查集来辅助的;在LDA/Kmeans++/RF/不平衡数据的处理等章节涉及的按概率采样,也是用的算法班详谈的技术。我个人觉得,学习算法要有“联系”的眼光,不要把算法学成一个个无联系的孤岛。
14、到时候ppt可以给我们吗,能推荐一些课外读物吗?
答:必然把课件分享给大家。和第4问的回答一样,我推荐《算法导论》。
15、你的博客地址是什么?
答:抱歉,我比较懒,没有博客。只有一个“微博”:@邹博_机器学习。不过,只是一些零散的内容了,可能更多的是机器学习相关的,偶尔会分享些算法相关的内容。
16、上课方式是什么?
答:会提前(如提前1周)给出课件和代码,大家尽量做好预习或复习工作。上课是使用在线直播,大家尽量跟直播——虽然我们会在第二天提供录播视频。因为可以直接答疑和提问,根据以往的经验,直播中的学习效率比事后看视频要好很多。课程直播应该是使用小象自己的平台。
17、机器学习,算法班有什么区别和侧重吗?
答:机器学习班和算法班是几乎不相交的两个内容。算法班是解决的“传统算法”:如分治法、贪心法、动态规划等。“算法班”按照横纵两个方向组织内容:纵向从数据结构的角度,以字符串/数组/链表/堆栈/队列/树/图的方式组织,同时横向以图论实践/动态规划/排序搜索/海量数据/系统设计的方式组织。从功利的角度看,算法班会冠以“面试算法”的称谓——因为会使用部分笔试面试的真题作为算法讲解的例子。
相对而言,《机器学习核心班》的内容数学味更浓一些,机器学习班是不使用开源库,主要讲解机器学习核心算法的:原理阐述+公式推导+代码实现+调参分析。如自己代码实现Logistic/Softmax回归,SVM,随机森林,Adaboost,kmeans,密度聚类、谱聚类,ICA,HMM等。
同时,《机器学习应用班》是直接使用sklearn/libSVM/LDA等开源库和numpy/pandas/scipy/matplotlib等数据处理和显示库,完成机器学习的各种应用,如“著名”的鸢尾花数据的分类、Lena图像的矢量量化、Titanic海难中乘客存活估计、手写体数字识别、网易新闻文本主题模型等问题。
18、请问有没有试听课呀?
答:目前我个人没有准备试听课。上一次算法拼团的时候做过一次算法的公开课,链接是:http://www.chinahadoop.cn/course/526
19、你讲了那么多算法。我看了好多。需要多久才能每个算法都吃透呢?
答:个人觉得这是个循序渐进的过程。如果以算法的语言表达,我们假定未知的知识组成了知识网络,则我们从某个点开始学习,既不是深度优先(一竿子走到黑),也不是广度优先(浅尝辄止),而是试探着完成一点广度搜索后,开始沿着某个路径略微深度搜索,然后继续“广度-深度”的交替。我至今也没有把每个算法吃透,仍然在学习探索的过程中。
20、课前的知识储备有什么呢?需要哪些前置技能?
答:其实做好算法几乎不需要太多的基础,如果非要说的话,我觉得大概需要这3点:
1、会任意一门编程语言(方便理解算法实现的代码,语言不是核心,不要陷入语言本身,算法班主要使用C/C++,机器学习班主要使用Python)。2、基本的问题抽象能力和算法思维(算法和机器学习的基本素养)。3、最重要的:每周至少有半天时间做复习/预习(学贵以恒)。
21、课程过程中会出练习题或者作业吗?
答:每次课的最后,都会给出“总结和思考”,提供大家我个人对于该章节的认识和进一步的思考学习方向,硬性的作业倒是没有。
22、我是做前端的,但不太了解C/C++,需要把C/C++先大概过一遍吗?
答:我个人完全没有必要。毕竟算法课不是讲语言,只是我用C/C++实现算法而已,便于更加精细的理解算法本身。
23、课程中的答疑环节是怎么做的?遇到不懂的问题怎么办?
答:上课时遇到不懂的,随时文字提问,我能够实时看到。我讲完一段就会集中答疑几分钟的。——试验了好久和好多方法,这种直播方式是学习效率最高的。虽然第二天提供视频的录播。其他时间遇到不懂的问题,最好在社区提问,这样不至于被各种聊天信息冲掉,提高学习效率。
问题当然是不仅仅局限于课上的内容,希望所有同学都参与进来,如果碰到我不熟悉的(这并非完全不可能,算法不比机器学习,算法其实是无底洞,它比机器学习要广泛的多),也欢迎一起学习、讨论。
24、网上有非常多免费的视频和文档,这个《面试算法·国庆版》的优势在哪里?
答:本课程特点:
(1) 算法原理阐述;
(2) 正反对比:为何选这个算法,而不是那个;
(3) 全部代码实现(非伪代码);
(4) 重视应用场景。
试想:自己手写一个堆排序和快速排序(都严格按照教科书做,不做进一步优化),使用数据多一下性能测试,你会喜欢上堆排序的,相信我。
25、需要提前预习吗?
答:如果是在有精力的前提下,(1)可以看看基础的数据结构:堆栈队列树图等内容;(2)也可以扫扫语言的障碍,如C/C++/Java或者其他任何一个自己习惯的语言(算法课程不会讲述语言,只讲算法本身,并且用C/C++给出算法实现)(3)如果已经有了一定的基础,可以看看《算法导论》——当然,很多其中的问题都会在课程中详细讨论的,如果没有更多时间,就采取“鸵鸟算法”:什么都不准备。(课程进行的速度还是蛮快的,每周三次,所以,课程进行中一定要做好预习/复习工作:每周都是课件提前一周上传到官网)
其实呢,我个人建议,如果有时间,随便看看算法、数据结构的相关内容;如果没太多时间,保持课上2个小时的高速运转(根据以往经验,2个小时满满当当,听完还是比较累的),然后课下使用4个小时左右做好复习。
26、怎么跟着学呢?mac用xcode可以跟着学吗?是不是只是在一个cpp文件里面写算法即可?
答:算法课程以培养大家的算法思维为核心,一般只是在单个文件即可完成核心算法。如“字符串的Huffman编码”,若干函数即可,显然不需要项目工程等问题。另外,xcode是Mac上的集成开发工具,当然没问题。
27、上课时间是哪个时间段?因为我在国外,有时差,但我看了你发的内容我还挺感兴趣的。
答:上课时间是北京时间20:00-22:00(根据以往经验,会略有拖堂),所以,需要算好时间。不过,就我自己的不完全了解,我的算法/机器学习班的学生已经有来自北美、英国、德国、意大利、瑞典、法国、澳大利亚、日本、新加坡、智利等地的。基本上可以保证大多数地方不至于在后半夜上课。粗略算下来,东亚和欧洲的问题都不大,北美的大概要上午上课。
根据以往的经验,湾区比国内可能要求会简单不少(当然,国内也没有变态到面试当场写一个RB-Tree的程度——事实上,离线写红黑树都没必要,了解它的旋转调整思路即可),所以,如果希望肉身翻墙的朋友,可以适当降低些难度,主抓中低档难度的题目;对于在国内求职的朋友,稍微了解些稍难的题目,还是在面试场上能够增色不少的。
 

浪dl

赞同来自:

天池三十万怎么不能买奥迪

zhenzixiong

赞同来自:

很不错的F&Q,看完就有了一个轮廓了!

xmingm

赞同来自:

请问课程的Q群号多少呢?

wbliu6910

赞同来自:

66页在解释一下为什么非平方项为0

要回复问题请先登录注册