酷壳: http://CoolShell.cn/ 

原文: http://coolshell.cn/?p=2583 

PS:本文是转载自陈皓大神的博客,希望对你有所帮助!

下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的或是比较生僻的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)

  1. A*搜寻算法 俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
  2. Beam Search
    束搜索(beam search) 方法是解决优化问题的一种启发式方法,它是在分枝定界方法基础上发展起来的,它使用启发式方法估计k 个最好的路径,仅从这k 个路径出发向下搜索,即每一层只有满意的结点会被保留,其它的结点则被永久抛弃,从而比分枝定界法能大大节省运行时间。束搜索于20 世纪70 年代中期首先被应用于人工智能领域,1976 年Lowerre 在其称为HARPY的语音识别系统中第一次使用了束搜索方法,他的目标是并行地搜索几个潜在的最优决策路径以减少回溯,并快速地获得一个解。
  3. 二分取中查找算法
    一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。这种搜索算法每一次比较都使搜索范围缩小一半。
  4. Branch and bound
    分支定界 (branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
  5. 数据压缩 数据压缩是通过减少计算机中所存储数据或者通信传播中数据的冗余度,达到增大数据密度,最终使数据的存储空间减少的技术。数据压缩在文件存储和分布式系统领域有着十分广泛的应用。数据压缩也代表着尺寸媒介容量的增大和网络带宽的扩展。
  6. Diffie–Hellman密钥协商 Diffie–Hellman key exchange,简称“D–H”, 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
  7. Dijkstra’s 算法 迪科斯彻算法(Dijkstra)是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Wybe Dijkstra)发明的。算法解决的是有向图中单个源点到其他顶点的最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离,迪科斯彻算法可以用来找到两个城市之间的最短路径。
  8. 动态规划 动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较著名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。这里也有一篇文章说得比较详细。
  9. 欧几里得算法 在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
  10. 最大期望(EM)算法 在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。
  11. 快速傅里叶变换 (FFT) 快速傅里叶变换(Fast Fourier Transform,FFT),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。本条目只描述各种快速算法,对于离散傅里叶变换的性质和应用,请参见离散傅里叶变换。
  12. 哈希函数 Hash Function是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
  13. 堆排序 Heapsort 是指利用堆积树(堆)这种数据结构所设计的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆积属性:即子结点的键值或索引总是小于(或者大于)它的父结点。
  14. 归并排序 Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
  15. RANSAC 算法 RANSAC 是”RANdom SAmple Consensus”的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法,由Fischler and Bolles在1981 提出,它是一种非确定性算法,因为它只能以一定的概率得到合理的结果,随着迭代次数的增加,这种概率是增加的。 该算法的基本假设是观测数据集中存在”inliers”(那些对模型参数估计起到支持作用的点)和”outliers”(不符合模型的点),并且这组观测数据受到噪声影响。RANSAC 假设给定一组”inliers”数据就能够得到最优的符合这组点的模型。
  16. RSA加密演算法
    这是一个公钥加密算法,也是世界上第一个适合用来做签名的算法。今天的RSA已经专利失效,其被广泛地用于电子商务加密,大家都相信,只要密钥足够长,这个算法就会是安全的
  17. 并查集Union-find 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
  18. Viterbi algorithm 寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states)

附录

  • 关于这个世界上的算法,你可以看看Wikipedia的这个网页:http://en.wikipedia.org/wiki/List_of_algorithms
  • 关于排序算法,你可以看看本站的这几篇文章《一个显示排序过程的Python脚本》、《一个排序算法比较的网站》

[转载] 陈皓:一些重要的算法相关推荐

  1. [转载] 陈皓——程序员技术练级攻略

    PS:原文出自酷壳上的陈皓对程序员从入门到精通的攻略,让你感受一下真正的大神吧!又是阿里人,他的文章真心不错,希望对你也有用.原文地址:http://coolshell.cn/articles/499 ...

  2. 是微服务架构不香还是云不香?(转载自陈皓前辈的博客:酷壳coolshell)

    有的人死了,他还活着. -- 臧克家<有的人> 听闻陈皓前辈因心梗不幸去世的消息,心情非常复杂,再次感慨世事无常. 可能我说陈皓前辈大家会不太熟悉,那我说<左耳听风>相信很多人 ...

  3. 【转载】酷壳网陈皓:开发者实用学习资源汇总

    原文地址:http://sd.csdn.net/a/20111125/308107.html 导读:本文是酷壳网(CoolShell)陈皓收集的一些学习资源和文章,涉及的知识面可能比较泛,其主要目的在 ...

  4. 程序员技术练级攻略--原作者:陈皓

    复制过来,作参考用. 程序员技术练级攻略 2011年07月18日  陈皓 评论 596 条评论  754,044 人阅读 月光博客6月12日发表了<写给新手程序员的一封信>,翻译自< ...

  5. 我是怎么招聘程序员的——引自大牛【陈皓】

    原文:http://coolshell.cn/?p=1870(酷壳)       很早以前就想写一篇和面试相关的文章了,今天在网络上看到一篇关于如何去面试程序员的英文文章,发现其中有很多和我共鸣的东西 ...

  6. 跟陈皓一起学makefile

    作者:陈皓     http://blog.csdn.net/haoel/article/details/2886/ 本文转载自:  http://blog.csdn.net/ruglcc/artic ...

  7. 对技术的态度—CoolShell 陈皓

    作者:陈皓(酷壳 – CoolShell.cn) 原文地址:http://coolshell.cn/articles/8088.html 最近人品爆发,图灵社区,InfoQ,51CTO相继对我做了采访 ...

  8. 图灵访谈之三十二:我的精神家园——陈皓(@左耳朵耗子)专访

    芝兰生于深谷,不以无人而不芳 .君子修身养德,不以穷困而改志. "码农人物志"第二期码农代表:陈皓(@左耳朵耗子),酷壳coolshell.cn博主. 14年软件开发相关工作经验, ...

  9. (转)跟我一起写 Makefile(一)(陈皓)

    本问转载自陈皓大神的跟我一起写 Makefile(一) 概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要 ...

最新文章

  1. ASP调用存储过程返回了一个参数和一个记录集时出现ADODB.Recordset 错误 '800a0e78'...
  2. mysql大表修改表名原理_MySQL修改大表工具pt-online-schema-change原理
  3. 17、MySQL函数简介
  4. springboot中使用lua脚本+aop作限流访问案例代码
  5. 上周热点回顾(7.8-7.14)
  6. 使用ARGV在命令行里接收参数
  7. 对Linux的cp命令的思考
  8. redhat linux查看进程cpu,Redhat Linux 查看cpu、memory 等命令
  9. eclipse 搭建python环境
  10. BB8球形机器人制作教程
  11. MySQL中的窗口函数
  12. 1.1、什么是编程?
  13. 有关计算机和音乐论文,计算机音乐
  14. 故障恢复控制台主要命令
  15. u盘插到电脑计算机里没有反应,U盘插在Windows7电脑上没反应怎么办?
  16. 二叉树的先序遍历(C++)
  17. 【reID学习记录】Person_reID_baseline_pytorch学习
  18. 立象(ARGOX) 条码标签打印机通用库 PLLB(BWIN-SCAPI)
  19. java int 十六进制_java中int使用十六进制
  20. 基于陷波滤波器的永磁同步电机振动抑制学习笔记

热门文章

  1. webpack中跨域请求proxy代理(vue与react脚手架不同设置方法)
  2. 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
  3. 【Oracle】查看死锁与解除死锁
  4. linux 的overcommit_memory、overcommit_ratio、swappiness 的说明
  5. 【原】动态申请二维数组并释放的三种方法
  6. cxgrid按条件计算合计值
  7. 有一次去校内的某个礼堂看电影,在门口有个长得很斯文的陌生人一脸神秘地跟我说:师弟,能不能进去之后,把电影票从厕所的气窗扔出来给我……...
  8. 计算机软件工作总结,计算机软件培训总结及小结-工作总结
  9. 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
  10. druid连接池_SpringBoot整合JDBCTemplate及Druid连接池