1、二分查找算法
二分查找的输入是一个有序的元素列表。若是元素在列表中,返回其位置,不然返回null数组
二分查找每次都将列表分红两半,分别与查询元素对比。舍弃其中一半。而后再另外一半中查找元素。机器学习
每次均可以排除一半的元素。因此其效率为O(logn以2为底)函数
二分查找查询的速度很是快,可是要求也比较严格,须要有序的列表。若是是无序的列表,就不能每次排查一半了。学习
2、递归排序
递归应该不算算法的一种,可是仍是稍微提一下递归
递归其实就是循环调用某个函数,直到知足条件才退出。队列
递归中很重要的是基线条件和递归条件效率
基线条件是退出递归的条件,若是没有基线条件,那么递归不会中止。陷入无限的循环中。搜索
递归条件是知足这些条件才循环调用函数。
二者缺一不可
3、快速排序(排序算法的一种,简称快排)
快排常常会和递归一块儿使用
其基线条件为,数组为空或者只包含一个元素。由于为空和只有一个元素就不须要排序了,直接返回。
递归条件为,从数组中取出一个元素,将其余元素分红两部分,一部分大于该元素,一部分小于该元素(等于能够包含再大于或者小于之中,均可以),而后递归调用大于该元素的数组和小于该元素的数组。返回大于元素的数组(递归调用结束后有序)+元素+小于元素的数组(递归调用结束后有序)。
快排的最好状况效率是O(n*logn),最坏状况是O(n*n)
假设传入的是一个有序的数组
咱们选择的元素是数组第一个元素。
那么就会出现最坏状况,递归次数为n次,每次对比n-1,n-2,到1次,那么就是n*n
若是咱们选择元素是数组中间元素
那么就会出现最佳状况,递归次数为logn次,那么就是n*logn
最佳状况其实也是平均状况,只要每次随机选择一个数组元素做为基准值。
4、广度优先搜索
广度优先搜索时一种用于图的查找算法,可邦族回答两类问题
一、从节点A出发,有前往节点B的路径吗?
二、从节点B出发,前往节点B的那条路径最短?
广度优先搜索常常搭配队列使用,
首先将出发点的全部邻居加入队列,遍历每一个邻居,找到终点直接返回,不然把每一个邻居的邻居加入队列,一直循环往复,直到找到终点或者队列为空。
广度优先搜索的效率为O(V+E),V时顶点数,E为边数
5、狄克斯特拉算法
狄克斯特拉算法一般用来处理加权图,包含四个步骤
一、找出最便宜的节点,便可在最短期内到达的节点
二、更新该节点的邻居开销
三、重复这个过程,直到对图的每一个节点啊都这样作了
四、计算最终路径
狄克斯特拉算法不能处理环,由于环会致使无限循环。陷入我也是个人邻居的邻居的无限循环中。
环其实就是无向图。因此狄克斯特拉算法只能处理加权有向图。权重不能为负
5、贪婪算法
贪婪算法很简单,每步都采起最优的作法,最终获得一个局部最优解(多是全局最优解)
NP彻底问题(很难找到快速解决方案)
判断问题是否为NP彻底问题一些方法
一、元素少时算法运行速度很是快,可是元素数量增长,速度变得很是慢
二、涉及“全部组合”的问题一般都是
三、不能将问题分为小问题,必须考虑各类可能的状况。多是NP彻底问题
四、问题涉及序列且难以解决,可能就是NP彻底问题
五、问题涉及集合且难以解决,可能就是NP彻底问题
六、问题可转换为集合覆盖问题或旅行商问题,确定是NP彻底问题
6、动态规划
动态规划经过将问题分为若干个离散的子问题,分别解决各个子问题,而后获得最终答案。
7、K最近邻算法(机器学习经常使用)
特征抽取,分类时抽取元素的特征,根据特征绘图。若是有多个特征,建议经过降维将维度缩小到二维或者三维。
经过毕达哥拉斯公式,计算其余元素跟该元素的距离。将该元素分类为与该元素距离越近的分类
分类就是编组
回归就是预测结果