如何开发算法(程序员必须掌握的算法)

每个开发人员都应该学习的 9 种算法

 

如何开发算法(程序员必须掌握的算法)

 

下面列出了 9种算法列表,有兴趣的开发人员应该通过这些算法来熟悉算法思维。

1.二分查找

二分查找是任何计算机科学课程中首先教授的内容之一。

二分查找是指获取一个已排序的数组,并迭代地将数组分成两部分,然后将要查找的元素与每一半进行比较,直到找到该元素。

2. 选择、冒泡和插入排序

排序算法是开发人员应该拥有的最基本的工具之一。选择、冒泡和插入排序是开发人员应该首先了解的。在效率很重要的任何情况下,使用它们是对数组遍历和操作的一个很好的方案。

3. 快速排序和合并排序

与 2 类似,排序算法非常适合数组,但 Quicksort 和 Mergesort 在不同的应用程序中使用都是非常有效的。

4.哈夫曼编码

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。

如何开发算法(程序员必须掌握的算法)

了解霍夫曼编码是熟悉数据表示和树遍历的好方法,这是计算机科学家需要解决的两个最重要的问题。

5.广度优先搜索

再次证明,树是开发人员使用的许多算法和软件的核心。因此,了解基本的树遍历是有追求的开发人员的首要任务。

广度优先搜索通过逐级探索树直到找到目标节点来工作。由于它确实经历了每个级别,因此可以保证找到解决方案

如何开发算法(程序员必须掌握的算法)

6. 深度优先搜索

继续树遍历,深度优先搜索是在树中查找元素的另一种主要方法。它不是逐级逐级向下工作,而是逐个分支探索树分支。

如何开发算法(程序员必须掌握的算法)

现在假设它没有无限扩展的分支,DFS 将同样始终有效。实现这两种搜索算法并不是特别复杂,但非常重要的是学习何时使用其中一种算法。许多软件设计能够理解正在使用的结构,并选择针对该结构进行优化的算法。

7.梯度下降

现在对于很多开发人员来说,梯度下降不一定有用。但是,如果使用回归或机器学习来接触任何东西,那么梯度下降将成为工作的核心。

如何开发算法(程序员必须掌握的算法)

梯度下降是一种使用微积分优化函数的方法。在回归和机器学习的背景下,这意味着找到可以最大限度地减少预测算法中的误差的特定值。虽然与许多其他算法相比,它在数学上肯定更多,但如果您正在大量处理数据和预测,那么了解梯度下降的工作原理非常重要。

8. Dijkstra 算法

Dijkstra算法(Dijkstra's algorithm) 迪杰斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉提出。

开发人员处理的另一个非常重要的问题是寻路。图表被证明是一种非常通用的方式来描述不同对象网络的各种问题。

如何开发算法(程序员必须掌握的算法)

Dijkstra 算法是一种在图中找到两个节点之间最快路径的方法。它是大多数寻路工作的基础,并发现自己用于从人工智能到游戏设计的多个领域。

9. Diffie-Hellman 密钥交换

Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分。Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。

Diffie-Hellman Key Exchange 很好地介绍了密码学的工作原理。更具体地说,Diffie-Hellman 密钥交换通过组合公钥和私钥(实际上是长数字)来加密在不同方之间传输的信息。

如何开发算法(程序员必须掌握的算法)

即使你不从事网络安全工作,对加密和安全通信的工作理解对于作为开发人员工作也非常重要。此外,尽管 Diffie-Helman 远非最佳算法,但它非常容易实现,并且与大多数其他加密通信方法足够相似。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论