算法,如今俨然已经成为了一个流行词汇。若在多年以前,这应该只有数学家,计算机科学家,程序员等高端专业人士才知晓并明白其含义的。而如今,你如果去路上问问某个大妈,她会告诉你,连算法都不知道的话,都不好意思去跳广场舞!虽然这种说法略显夸张,不过算法越来越流行是不争的事实。这得益于通信,计算机和互联网,特别是移动互联网的飞速发展,而驱动这种发展的核心就是算法。近年来大数据分析和人工智能变得炙手可热,各种各样的算法更是层出不穷。
是时候学点算法了!
这个公众号讲述我个人在学习算法过程中的一些记录和感悟,嗯,就酱。
上面是开张致辞。
算法是什么
算法是什么?作为一名工程师,我们的理解肯定和广场舞大妈是不一样的。我的理解是:算法是一种定义明确的计算过程,该过程可以将特定的输入转换成预期的输出。上述理解有两个关键字:定义明确,特定的输入。定义明确是说算法必须是明确描述而没有任何歧义,不同的人阅读同一个算法不会产生任何的理解上的不一致(除非理解错了)。特定的输入是说算法处理的对象是有限制条件的,一个算法不是任何对象都能处理,也就是说一个算法是有其适用范围的,不存在万能的算法。
如何学习算法
我是没有资格谈这个的,因为我也正在学习过程中。不过我好歹也是一名算法工程师,就从我工作和平时学习中体会到的谈一谈。
首先,基本的数学功底还是要打好的。算法的定义那里已经说了,算法是定义明确没有丝毫歧义的,这样的东西,必须是数学语言描述的嘛。确实,我们接触到的大多数算法都是用数学描述的,所以,数学好,算法才好,毋庸置疑。那么,需要打好哪些数学基本功呢?我就列几个我能想到的吧,基本也够了。
线性代数/矩阵分析
线性关系就是“一次关系”,我们最先学解方程就是学的“一元一次”方程,所以线性关系是一种简单容易处理的关系,我们喜欢这种简单直接的关系。线性代数就是描述线性关系及其运算规律的一门学科。
微积分
虽然我们喜欢简单直接的线性关系,但是很不幸的是,自然界中的大部分关系都远比线性关系复杂得多。微积分就是一门将非线性转换成线性来处理得学科。
概率论与数理统计
前面说了,我们得算法和数学都是定义明确的,这并不是说我们研究和描述的对象是明确的。实际上,自然界中的绝大多数事物都是随机的。概率统计就是一门以明确的定义和分析方法来研究哪些飘忽不定的事物的学科。
综上所述,有了上述三门学科,我们就可以把我们研究的随机的,非线性的事物,用确定的,线性的算法搞定!听起来很激动有木有。
(什么?你数学很好,回回考满分?好的,那请你回答出高等数学中“函数”的准确定义。)
其次,学好一门编程语言。哪门语言不重要,关键是能熟练运用就好,这是你实现和验证你的算法的有力工具。我就不推荐某种语言了,否则势必引起撕逼。
最后,努力学习。
本来这次还是想来点干货的,把研究生期间做过的算法或者工作中接触到的某些知识分享一下。然而太长。
下次吧。
领取专属 10元无门槛券
私享最新 技术干货