zoukankan      html  css  js  c++  java
  • “主宰世界”的10种算法短评

    声明:引用请注明出处http://blog.csdn.net/lg1259156776/


    下面是在网络上引起热议的“主宰世界”的10种算法,本文的目的是在于引入,以便后续的拓展算法学习。

    这里写图片描述

    1. 归并排序(MERGE SORT),快速排序(QUICK SORT)和堆积排序(HEAP SORT)
    2. 傅立叶变换和快速傅立叶变换
    3. 代克思托演算法 (Dijkstra’s algorithm)
    4. RSA非对称加密算法
    5. 哈希安全算法(Secure Hash Algorithm)
    6. 整数质因子分解算法(Integer factorization)
    7. 链接分析算法(Link Analysis)
    8. 比例微积分算法(Proportional Integral Derivative Algorithm)
    9. 数据压缩算法
    10. 随机数生成算法

    以上加粗的条目在某种程度上是我已经涉猎过的算法,下面主要通过对算法的概念,以及这十大算法的应用进行论述,引发学习的热情。


    什么是算法?

    简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E. Leiserson 《算法导论第3版》)

    算法必须具备如下3个重要特性:

    [1] 有穷性。执行有限步骤后,算法必须中止。
    [2] 确切性。算法的每个步骤都必须确切定义。
    [3]可行性。特定算法须可以在特定的时间内解决特定问题。

    算法虽然广泛应用在计算机领域,但却完全源自数学。实际上,最早的数学算法可追溯到公元前1600年-Babylonians有关求因式分解和平方根的算法。


    十大算法

    归并排序(MERGE SORT),快速排序(QUICK SORT)和堆积排序(HEAP SORT)

    这里写图片描述

    这个具体算法实现和分析我会在以后的数据结构和算法集中营栏目中以排序专题进行总结。

    与早期的排序算法相比(如冒泡算法),这些算法将排序算法提上了一个大台阶。也多亏了这些算法,才有今天的数据挖掘,人工智能,链接分析,以及大部分网页计算工具。


    傅立叶变换和快速傅立叶变换

    这两个算法实际上是信号处理课程中(数字信号处理)相关课程中最重要的内容之一,实际上就是给出了在频率域观测信号的一种方法。具体算法都已经非常成熟了,不用再进行总结。

    这两种算法简单,但却相当强大,整个数字世界都离不开它们,其功能是实现时间域函数与频率域函数之间的相互转化。能看到这篇文章,也是托这些算法的福。

    因特网,WIFI,智能机,座机,电脑,路由器,卫星等几乎所有与计算机相关的设备都或多或少与它们有关。不会这两种算法,你根本不可能拿到电子,计算机或者通信工程学位。


    代克思托演算法 (Dijkstra’s algorithm)

    这个算法以前从来没有听说过。后面有进一步接触的机会时,再进行详细总结,下面只分析其具体的功能和应用。

    可以这样说,如果没有这种算法,因特网肯定没有现在的高效率。只要能以“图”模型表示的问题,都能用这个算法找到“图”中两个节点间的最短距离。

    虽然如今有很多更好的方法来解决最短路径问题,但代克思托演算法的稳定性仍无法取代。

    从上面引用的内容可以看出,实际上该算法是解决图中的最短路径问题,让我联想到了TSP(旅行商问题),我知道的方法是可以采用玻尔兹曼机来解决(采用模拟退火)。


    RSA非对称加密算法

    这个内容在我的博文《数学之美》的谈谈密码学中有对这种算法的介绍,具体的内容可以参考该博文。

    毫不夸张地说,如果没有这个算法对密钥学和网络安全的贡献,如今因特网的地位可能就不会如此之高。现在的网络毫无安全感,但遇到钱相关的问题时我们必需要保证有足够的安全感,如果你觉得网络不安全,肯定不会傻乎乎地在网页上输入自己的银行卡信息。

    RSA算法,密钥学领域最牛叉的算法之一,由RSA公司的三位创始人提出,奠定了当今的密钥研究领域。用这个算法解决的问题简单又复杂:保证安全的情况下,如何在独立平台和用户之间分享密钥。


    哈希安全算法(Secure Hash Algorithm)

    该算法没听说过,不过类似的内容还是有所了解的,对于哈希这种数据结构,或者说查找表,散列表,在我的博文《 散列表》中有着详细的论述。

    确切地说,这不是一种算法,而是一组加密哈希函数,由美国国家标准技术研究所首先提出。无论是你的应用商店,电子邮件和杀毒软件,还是浏览器等等,都使用这种算法来保证你正常下载,以及是否被“中间人攻击”,或者“网络钓鱼”。


    整数质因子分解算法(Integer factorization)

    这个似乎是用来解谜用的,在密码学中有着重要的作用。RSA加密算法就是用到了大的整数因子分解。

    这其实是一个数学算法,不过已经广泛应用与计算机领域。如果没有这个算法,加密信息也不会如此安全。通过一系列步骤将,它可以将一个合成数分解成不可再分的数因子。


    这里写图片描述

    这个算法没听说过,但是感觉像是在互联网上应用。

    在因特网时代,不同入口间关系的分析至关重要。从搜索引擎和社交网站,到市场分析工具,都在不遗余力地寻找因特网的真正构造。

    链接分析算法一直是这个领域最让人费解的算法之一,实现方式不一,而且其本身的特性让每个实现方式的算法发生异化,不过基本原理却很相似。

    链接分析算法的机制其实很简单:你可以用矩阵表示一幅“图“,形成本征值问题。本征值问题可以帮助你分析这个“图”的结构,以及每个节点的权重。这个算法于1976年由Gabriel Pinski和Francis Narin提出。

    谁会用这个算法呢?Google的网页排名,Facebook向你发送信息流时(所以信息流不是算法,而是算法的结果),Google+和Facebook的好友推荐功能,LinkedIn的工作推荐,Youtube的视频推荐,等等。

    普遍认为Google是首先使用这类算法的机构,不过其实早在1996年(Google问世2年前)李彦宏就创建的“RankDex”小型搜索引擎就使用了这个思路。而Hyper Search搜索算法建立者马西莫·马奇奥里也曾使用过类似的算法。这两个人都后来都成为了Google历史上的传奇人物。


    比例微积分算法(Proportional Integral Derivative Algorithm)

    这个算法可能是自动控制理论的基础,是自动化领域的必不可少的一个基础算法。具体的内容,以及其基础的改进算法可以参看我的一篇博文《经典PID控制及应用体会总结》。

    飞机,汽车,电视,手机,卫星,工厂和机器人等等事物中都有这个算法的身影。

    简单来讲,这个算法主要是通过“控制回路反馈机制”,减小预设输出信号与真实输出信号间的误差。只要需要信号处理,或电子系统来控制自动化机械,液压和加热系统,都需要用到这个算个法。

    没有它,就没有现代文明


    数据压缩算法

    数据压缩是一个非常热门的领域,前几年火热的稀疏分解,压缩感知,再早一些的小波变换,余弦变换等,都是非常经典的数据压缩方法。

    数据压缩算法有很多种,哪种最好?这要取决于应用方向,压缩mp3,JPEG和MPEG-2文件都不一样。
    哪里能见到它们?不仅仅是文件夹中的压缩文件。你正在看的这个网页就是使用数据压缩算法将信息下载到你的电脑上。除文字外,游戏,视频,音乐,数据储存,云计算等等都是。它让各种系统更轻松,效率更高。


    随机数生成算法

    随机数的应用简直是无处不在,在密码学中设计的密码最希望的就是完全随机数,而在最大熵模型中,就输白噪声、随机数的熵最大,最混乱无序。所以,随机数生成算法是非常重要的。当然都是伪随机数发生器。对于随机数发生,生成具有高斯分布的随机数,可以参考我的博文《如何模拟高斯分布的随机数发生器?》。后续将会总结matlab中的随机数发生函数的应用,以及蒙特卡洛方法等。

    到如今,计算机还没有办法生成“正真的”随机数,但伪随机数生成算法就足够了。这些算法在许多领域都有应用,如网络连接,加密技术,安全哈希算法,网络游戏,人工智能,以及问题分析中的条件初始化。


    实际上,以上十大算法算是比较早的总结了,很多现在应用非常广、作用深远的机器学习、人工智能算法都没有包囊进去。不过以上算法也都是非常经典,值得揣摩的。


    引用内容摘自:
    http://jandan.net/2014/05/31/10-algorithms.html

    2015-9-22 艺少

  • 相关阅读:
    Java面试题
    verilog之锁存器和触发器
    verilog基本语法之always和assign
    verilog之基本结构
    ZYNQ7000系列学习之TF卡读写实验
    英语文档阅读学习系列之ZYNQ-7000 All Programmable SOC Packaging and Pinout
    物理之纳电子
    英语文档阅读学习系列之Zynq-7000 EPP Software Developers Guide
    嵌入式C语言设计学习
    ZYNQ7000系列学习之自定义模块构成IP
  • 原文地址:https://www.cnblogs.com/huty/p/8519136.html
Copyright © 2011-2022 走看看