[转载] 陈皓:一些重要的算法

酷壳: 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)

附录

时间: 2024-10-29 17:06:19

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

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

          PS:原文出自酷壳上的陈皓对程序员从入门到精通的攻略,让你感受一下真正的大神吧!又是阿里人,他的文章真心不错,希望对你也有用.原文地址:http://coolshell.cn/articles/4990.html           陈皓酷壳博客地址:    http://coolshell.cn/haoel                陈皓CSDN博客地址: http://blog.csdn.net/haoel 个人简介 15年软件开发相关工作经验,8年以上项目和团队管理

三军主力 助企上云:让天下企业没有难上的“云” —— 新致云副总裁陈皓专访

云计算的世界,越来越多的参与者,角色各异,带给云计算越来越丰富的内涵,但也越来越复杂.各种厂商,各种服务商,各种技术提供商,各种组织,各种应用,当然,也有各种忽悠.于是,CIO们困惑了?如何上云?如何简单而又安全高效的上云?成了现阶段大家共同研究的问题. 上图为:新致云副总裁陈皓 当企业网D1Net记者将这个问题抛给新致云副总经理陈皓时,他简短而肯定的回答笔者:"让天下企业没有难上的"云",这是新致云一直以来的目标以及未来的愿景,我们期望 "云算天下",通

陈皓:由12306.cn引发的网站性能技术思考

中介交易 SEO诊断 淘宝客 云主机 技术大厅 伴随着十一长假的来临,大家对于铁道部12306的讨论又多了起来.这篇文章(原文)从12306网站延展到网站性能的诸多讨论,对于创业者与技术爱好者有很强的借鉴意义.本文作者陈皓(weibo)有14年软件开发相关工作经验,8年以上项目和团队管理经验. 12306.cn网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解.只讨论性能问题,不讨论那些UI,用户体验,或

陈皓:谈谈数据安全和云存储

本文讲的是 : 陈皓:谈谈数据安全和云存储   ,  前些天,创新工场李开复同学在2012博鳌亚洲论坛表示:  "你们有多少人丢过手机?大概有15%.你们有多少人数据放在微软掉过的?我想不见得很多吧.所以相对来说是安全的.放在大公司里比自己拿着掉的概率更大,你不相信的话,可以问陈冠希先生." 两种安全 看到这个消息的时候,我觉得李开复同学混淆了云存储和安全这两个概念,在英文里,有两个单词,一个是Safe,一个是Security,很不幸的是,这两个英文单词翻译成中文都叫"安全&

《开源思索集》一如何看待陈皓在微博上对闭源和开源软件的评论?

如何看待陈皓在微博上对闭源和开源软件的评论? 开源思索集 忍不住要深深地叹息一声,各位,这个观点真的一点都不新鲜,而且早就被批得一钱不值了. 在1998年,微软的万圣节文件被泄露,然后流到了Eric S. Raymond的手上,他是<大教堂与集市>的作者. ESR以极其尖锐的语言,点评了这批文件,我只打算摘录与陈皓观点相关的部分. 微软的文件中说:"当向JimAll描述这个问题的时候,它提供了漂亮的模拟"追逐后灯".要使一大批半组织的暴民合作,必须要向他们指出一个

陈皓:程序员技术练级攻略

P.S. 本文转载自http://coolshell.cn/articles/4990.html,另外特别推荐酷壳博客.     月光博客6月12日发表了<写给新手程序员的一封信>,翻译自<An open letter to those who want to start programming>,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章.因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结

IT学子成长指导类文章链接(六)

链接:IT学子成长指导类文章链接(一)(二) (三) (四) (五) "IT学子成长指导"类我收藏过的好文(六期:至2013年4月20日) 转载陈皓老师 再谈"我是怎么招聘程序员的"(上) 转载陈皓老师 再谈"我是怎么招聘程序员的"(下) cs硕士妹子找工作经历[阿里人搜等互联网] 一个即将毕业的java笨鸟对于编程学习的回忆 在企业工作一年多的几点感悟 随想录(程序员和收入) 在企业工作一年多的几点感悟 看到一位专注编程几乎40年的美国计算机科

Python实现八大排序算法(转载)+ 桶排序(原创)

插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 代码实现 基数排序 核心思想 代码实现 桶排序 核心思想 代码实现 测试结果 总结 排序算法,重要性不言而喻.现摘录一篇,转载至此,以供学习鉴赏. 插入排序 核心思想 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间

【转载】跟我一起写 Makefile

跟我一起写 Makefile陈皓 (CSDN)概述--什么是makefile?或许很多Winodws 的程序员都不知道这个东西,因为那些Windows 的IDE 都为你做了这个工作,但我觉得要作一个好的和professional 的程序员,makefile 还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML 的标识的含义.特别在Unix 下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完成