zoukankan      html  css  js  c++  java
  • 算法简介

    ------------------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】

  • 相关阅读:
    About IL, ILGenerator
    何谓系统架构师(转)
    C# weakreference
    新蛋,您能告诉我,这是怎么了吗?
    C#线程同步的常用关键字简介
    [转]百万级访问网站前期的技术准备
    Gridview控件的使用要点
    Asp.net三种页面传值方法
    浅谈 Vue css scoped & module
    Mac iTerm2 zsh: command not found: node/npm/nvm...
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6902043.html
Copyright © 2011-2022 走看看