算法,程序员的?

2016年是人工智能大火的第一年,所以16年17年毕业的计算机软件类本科生,大部分都选择了算法相关的研究方向,nlp、cv、数据挖掘...还有大批其他专业的学生转专业来学习计算机。越来越多人学算法,越来越多人应聘算法,导致算法岗的竞争压力越来越大。

什么是算法?

算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。

分类:

算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。

一个算法应该具有以下五个重要的特征:

1、有穷性:一个算法必须保证执行有限步之后结束;

2、确切性:算法的每一步骤必须有确切的定义;

3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;

4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

5、可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)

算法和程序的关系是:算法就是程序的灵魂,一个需要实现特定功能的程序,实现它的算法可以有很多种,所以算法的优劣决定着程序的好坏。 程序就是遵循一定规则的、为完成指定工作而编写的代码。有一个经典的等式阐明了什么叫程序:程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境 。

程序员为什么要学算法?

程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。

算法对于计算机编程来说犹如数学中数论的哥德巴赫猜想,虽然没有那么难,但它的地方也是十分重要的。

在早期的程序员可能对与算法的感性人世不足,认为算法的研究是那些算法工程师的事情,对于普通的编程人员的用处是很小的,其实这种想法是十分错误的。

语言是我们走向更高级的编程的必经之路,一个好的算法对于一个好的项目是至关重要的,如果不能在算法方面有自己的建树,软件编程做到头也就是一个码农而已。

究竟怎么学算法呢?

image.png
image.png

听说腾讯课堂小码哥李明杰老师推出了《每周一道算法题》课程。

如果你害怕知识太理论,无法有效输入;如果你担心在学习的时候不系统,无法自己构建知识体系;或者你觉得在学习中没有人指导纠正错误,学习的时候闷头乱撞,甚至没有学习动力或学习氛围。可以去尝试听一下。