Fork me on GitHub

算法简介

------------------siwuxie095

   

   

   

   

   

   

   

   

为什么要学习算法?

   

   

难道仅仅为了应付面试吗?

   

其实不然,算法在计算机这个行业中至关重要,甚至可以这么说:算法无处不在

   

   

   

我们学习计算机编程,都是在 IDE 中写给定的程序开始的,C、C++、

Java、Python … 计算机的语言非常之多

   

初学这些语言的时候,可能觉得很简单,就是声明一个变量,写一个

循环,做一个函数,慢慢地组建起了自己的逻辑

   

很多人认为本科、或工作中所写的程序和算法一点关系都没有,但是

大家思考过没有:编译器到底是怎么理解你所写的程序

   

   

事实上,编译器这个工具本身就包含了诸多算法:从理解你的特定语法,

到系统里的内存分配,从能够智能地报告给你编译的错误,甚至是逻辑

的错误,到能够自动优化你所写的代码,提高程序执行的效率

   

这些都是算法做成的,只不过这些算法被封装进了一个工具中,我们甚

至意识不到它的存在,认为它是理所当然的

   

   

   

   

   

在当今社会,这种工具中蕴含的巨大的算法,已经不仅仅是提供给像程序员

这种专业人士来使用,很多常见的工具也蕴含着算法带给普通大众的便利

   

   

最典型的就是搜索引擎的使用,如果我在 Google 中搜索一个关键字,

如:algorithm

   

   

   

Google 在 0.48 秒的时间中,就为我找到了 127 个 million, 也就是上

亿条的搜索结果

   

Google 不仅帮我找到了结果,并且按照它的算法进行了排序,把最重要

的内容放在了前面。显然,这是经过遍历的

   

这里大家可以想象一下,不要说靠人的力量来遍历一亿多条信息,到底是

怎样一个工作量

   

即便是使用自己熟悉的语言,简单地写一个 for 循环:从0 遍历到 1.27 亿,

不妨尝试一下计算机究竟需要花多长时间,才能做到这一点

   

而因为有了算法,Google 可以在 0.48 秒的时间中,从比一亿这个数量级

大的多的浩瀚的网络信息的海洋中,帮我准确定位到一亿多条有用的信息,

这便是算法的力量

   

   

   

   

   

而现在,算法也早已不仅仅是在浩瀚的信息海洋中进行简单的查找了,以

苹果的 Siri 为例代表着算法的另一类巨大的用途,即 能够智能的理解人类

的语言

   

   

   

Siri 靠语音识别相关的算法,不仅可以准确的辨识我们说的是什么,更能够

给出相应的智能回应

   

   

   

   

   

同时,如何让机器更好的理解我们人类自身,理解我们的生活,也是一个

非常热门的话题,以此为代表,最为成熟的就是推荐算法的使用

   

事实上,无论是 Google,还是音乐、电影、媒体相关的像 Spotify、

Netflix、IMDb、YouTube 等,或购物平台 Amazon、eBay,或求

职平台 LinkedIn,或出行平台 Uber …

   

全都依托于推荐算法,帮助我们更加方便快捷的找到自己想要的信息

   

甚至有些时候,我们自己都没有意识到我们会需要和喜欢某一类信息,

而推荐算法却推荐了过来

   

很多人都听说过推荐算法背后一个重要的学科,叫做 机器学习,实际上,

机器学习的基础,也是基本的算法的使用

   

   

   

   

   

抛开上面的高大上,在我们的生活中,也存在着很多算法,例如:动画、游戏,

在制作这些娱乐产品时,也是离不开算法的

   

   

在动画中:

   

   

   

现在的动画制作,早已不是一帧一帧来绘制,最后再连起来,而是形成

了一套使用计算机进行建模、进行渲染、 进行运动、进行交互的机制

   

近乎每一个画面都包含了无数前人对算法的研究,如:动物毛发的制作,

物体的运动如何符合现实运动规律,各种光线的反射、折射,以及环境

的模拟:天空上的云朵、水的效果这些全部是算法

   

当然,不仅是动画电影这种完全虚拟化制作,需要图形学的算法来进行

生动的表现,就算是制作真人电影,也需要强大的计算机技术来进行影

视的后期制作,将虚拟的生物、或特殊的效果融合进电影中,以达到更

好的表现效果

   

   

   

在游戏中:

   

   

   

就算我们平时玩的非常简单的小游戏也蕴含着有意思的算法,如:迷宫生成的算法

   

在很多游戏中都有迷宫的概念,但并不是所有的迷宫都是人为事先设计好的,很多

游戏的迷宫是靠计算机自动生成的,如何生成一个靠谱的有意思的迷宫,便是一个

典型的算法问题

   

   

   

在制作这种小游戏的过程中,也会遇到算法,扫雷就是一个典型的例子

   

不知道有多少人曾经思考过:自己能不能制作出扫雷这样的游戏?

   

当点击一个小方块时,这个小方块将向外展开多少个空间,这是一个非常经典

的算法的使用,叫做 Flood Fill

   

   

   

除了制作这种小游戏,在玩这种游戏的时候,也可以使用算法,这样的游戏

相信大家都玩过:通过移动方块来消除屏幕中的方块,最后把所有的方块都

消除干净

   

类似的小游戏非常多,如:有一阵子大热的 Blue Path,它的本质就是寻找

一条哈密顿通路,也就是遍历屏幕上所有可以遍历的点,这就是一个典型的

图论算法

   

   

说到游戏,更不用提在诸多游戏大作中面对复杂的游戏规则,电脑 AI 也是

采用算法来和人类进行对弈的

   

AI,即 人工智能

   

   

   

而说到电脑 AI 和人类的对弈,那么今年(2017)最火的莫过于 AlphaGo

这个由人类所编写的围棋程序打败了世界上重量级的围棋选手

   

而 AlphaGo 背后是一种叫做深度学习的算法,是机器学习算法的一个分支。

显然,深度学习本身也是一种算法

   

   

   

除了 AI 需要使用算法,近年来(2017),计算机视觉相关的算法也在飞速

发展,通过现在非常火热的无人车、无人驾驶等概念也不难看出,这里面核

心的技术就是计算机视觉

   

计算机视觉要根据图像作为输入,来识别出图像相关的信息

   

   

   

而和计算机视觉相对应的一个也非常火的概念,就是所谓的 AR 技术

   

AR,即 增强现实

   

如:迪士尼的一个非常有意思的 Demo,在真实的环境中使用纸和笔

进行绘制,而程序通过摄像头来看绘制的画,相应的在虚拟世界里就

能产生出一个立体的图像,同时完美的把涂色效果在一个虚拟世界的

3D 空间中展示出来

   

实现这样的效果,背后依然是算法的积累

   

   

迪士尼 Demo 链接:

https://www.disneyresearch.com/publication/live-texturing-of-augmented-reality-characters/

   

   

   

   

   

而在常用的软件中:

   

1

   

   

在使用 Photoshop 进行抠图操作时,Photoshop 中魔棒就是一个

非常典型的算法,可以把相近颜色的内容勾选出来

   

   

2

   

   

而各种压缩型的文件,如:JPG、MP3、MP4、RAR 文件,它们都

是非常有效的压缩算法的实现,帮助我们把本来非常大的数据包压

缩变小,使得我们可以更加容易的存储更多的海量的数据

   

   

3

   

   

另外相信大家都学习过数据库,其实数据库本身就是一个巨大的算法

,只不过,它将这个算法库封装的很好,让我们只需要使用简单的

SQL 语句就可以快速的进行数据库的存取

   

但是不知道大家有没有想过:如果我要自己实现一个数据库,该怎么做呢?

   

当然,现在有那么多成熟的产品,不会有人来自己实现数据库了,但是如果

大家要进入像 Oracle 这样的数据库公司,改进它们的数据库,或推出下一

代的数据库,这些算法就变得非常有意义

   

   

   

   

   

上面提到的能够做出那么复杂的、或有意思、或有意义的功能,在本质

上,都是依托于算法,而算法的另一个非常重要的作用就是进行性能

优化

   

   

如:在苹果 2016 年的开发者大会上,对苹果的智能手表 Apple Watch

的系统进行了一次更新。在这次更新中,watchOS 3 以一个非常重要的

机制 instant 来提升性能,这个机制完全是系统层面的改进

   

   

   

以前购买的苹果手表,只要升级到 watchOS 3,就可以享受这个机制带

来的便利,它使软件的运行速度提高了 7

   

   

   

   

   

总结

   

   

1)算法是非常有用的,我们每天都在接触算法

   

2)学好算法,才能创造出更有意义的东西

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

posted on 2017-05-25 09:18  siwuxie095  阅读(376)  评论(0编辑  收藏  举报

导航