算法图解学习笔记之算法

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最近邻算法(机器学习经常使用)

特征抽取,分类时抽取元素的特征,根据特征绘图。若是有多个特征,建议经过降维将维度缩小到二维或者三维。

经过毕达哥拉斯公式,计算其余元素跟该元素的距离。将该元素分类为与该元素距离越近的分类

分类就是编组

回归就是预测结果

相关文章
相关标签/搜索