作为一名程序员,还是需要掌握一些较为基础和经典的算法的,这些经典算法的思想往往能提供给我们解决新问题的思路。
算法和数据结构是每个计算机专业学生的必修课,其中涉及到的数据结构概念主要有数组、栈、队列、树、图等,主要的算法有排序算法、查找算法等等。下面是对一些经典算法的简单介绍。
排序算法:
- 选择排序。不断选择数组中剩余元素之中的最小者,并将它和数组的第一个元素交换位置,直到整个数组都排序完毕。
- 插入排序。将元素插入到其他已经有序的数组中的适当位置,当索引到达数组右端时,排序完成。
- 归并排序。要将一个数组排序,先(递归地)将它分为两半分别排序,然后将结果归并起来。
- 快速排序。将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序则是当两个子数组都有序时整个数组也就自然有序了。
……
查找算法:
- 顺序查找。从线性表的一端开始,顺序扫描,将给定的元素依次与扫描到的元素进行比较,直到找出与给定元素相同的元素,或将线性表中的元素都与其比较完为止。
- 二分查找。二分查找是针对有序数组进行的。首先,假设数组中的元素是升序排序。将数组中间位置的元素与待查找的元素进行比较,如果二者相同则查找成功。否则,从该中间位置将数组分为前后两个子数组,如果中间位置的元素大于待查找元素,则进一步在前面的子数组中查找,否则进一步在后面的子数组中查找。重复以上过程,直到查找成功或子数组不存在为止。
- 二叉查找树。在二叉查找树中使用递归算法查找元素:如果树是空的,则查找失败;如果待查找元素和根结点的元素相同,查找成功,否则就(递归地)在适当的子树中继续查找。如果待查找元素比较小就选择左子树,较大则选择右子树。
- 散列表。使用三列的查找算法分为两步。第一步是利用散列函数将待查找元素转化为数组的一个索引,但有时会出现两个或多个元素散列到相同的索引值的情况。因此,散列查找的第二部是处理碰撞冲突,主要有拉链法和线性探测法两种方法。
- 深度优先搜索。深度优先搜索的步骤为:访问图的一个顶点v,然后依次从v的未被访问的邻接点出发,对图进行深度优先遍历,直至图中和v有路径相通的顶点都被访问。如果此时图中尚有顶点未被访问,则从一个未被访问过的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
- 广度优先搜索。广度优先搜索从图的一个顶点v出发,访问v所有未被访问的邻接点。然后依次从这些邻接点出发,访问它们所有未被访问的邻接点。以此类推,直到途中所有访问过的邻接点都被访问到。
……
人工智能时代,机器学习算法工程师的需求量大大增加,各种机器学习算法层出不穷。机器学习算法主要分为两大类,一类是传统的机器学习算法,另一类则是如今非常火热的深度学习算法。
传统的机器学习算法有:
- k-近邻算法。k-近邻算法通过测量不同特征值之间的距离进行分类。当输入没有标签的新数据时,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似(最近邻)数据的分类标签。
- 决策树。原理类似于“20个问题”游戏:参与游戏的一方在脑海里想某个事物,其他参与者向他提问题,只允许提20个问题,问题的答案也只能用对或错回答。问问题的人通过推断分解,逐步缩小待猜测事物的范围。在决策树算法中,用户输入一系列数据,然后给出决策。
- 朴素贝叶斯。朴素贝叶斯是一种基于概率论的分类算法,在做决策时要求分类器给出一个最优的类别猜测结果,同时给出这个猜测的概率估计值。
- 支持向量机。支持向量机是一种监督学习方法,是一种对数据进行二元分类的线性分类器。它通过对学习样本求解最大边距超平面来进行分类。支持向量机的各种衍生算法已经实现了多分类、回归等功能,在模式识别领域有广泛应用。
- AdaBoost元算法。AdaBoost算法是一种迭代算法,其原理是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个性能更强的分类器(强分类器)。
- k均值聚类算法。这是一种比较常用的聚类方法。首先,确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中。具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,每个簇的质心更新为该簇所有点的平均值。
- 主成分分析(PCA)。这是一种经典的降维方法。将一个矩阵中的样本数据投影到一个新的空间中,将原来多个变量的复杂因素归结成为几个主要成分,使问题简单化,得到的结果更加科学有效。
……
深度学习方法有:
- 卷积神经网络。卷积神经网络是基于人类视皮层中感受野的结构得到的模型,由输入层、卷积层、池化层、全连接层和输出层组成。通过增加卷积层和池化层,还可以得到更深层次的网络。卷积神经网络可用于语音识别和图像识别等领域。
- 受限玻尔兹曼机。玻尔兹曼机起源于Hopfield这种相互连接型神经网络,在此基础上又提出了受限玻尔兹曼机。受限玻尔兹曼机是由可见层和隐藏层构成的,可见层和隐藏层又分别由可见变量和隐藏变量构成。它可以用于降维、分类、回归、协同过滤、特征学习以及主题建模的算法。
- 自编码器。自编码器是一种有效地数据维度压缩算法,目的在于通过不断调整参数,重构经过维度压缩的样本,常用于数据降噪和降维。
……
以上是一些较为经典的算法。在不同的领域中,这些算法根据实际应用的需要又衍生出了各种变种算法,所以各位程序员或算法工程师还是需要针对具体的应用要求,对算法进行深入地研究与创新。
读者福利:
今天给大家带来的是一份Java数据结构与算法的PDF
这一份Java数据结构与算法的PDF现在是可以免费的赠送给各位读者朋友
领取方式
由于内容实在太多,无法全部展示,需要的朋友们注意啦:一键三连(点赞+收藏+关注)
|