算法笔记

 一、排序算法

1.桶排序(最快最简单的排序)

  这个算法就好比有11个桶,编号从0~10。每出现一个数,就将对应编号的桶中的放一个小旗子,最后只要数数每个桶中有几个小旗子就OK了。

  优点:速度快

  缺点:比较费空间

  时间复杂度:O(M+N)

 

2.冒泡排序:(邻居好说话,但是效率低)

  就如同是一个气泡,一步一步往后“翻滚”,直到最后一位。

  优点:空间复杂度较小

  缺点:时间复杂度较高(因此不推荐)

  时间复杂度:O(N^2)

  

 3.快速排序:(最常用的排序)

  每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。

  优点:比冒泡排序效率要高

  缺点:最差的情况,复杂度等于冒泡排序

  时间复杂度:O(NlogN)

二、常用数据结构

1.队列:先进先出

2.栈:后进先出

3.链表:快速插入

  双向链表、循环链表

三、常用算法 

1.枚举法:暴力破解

  通过优化算法,可以减少计算量,降低时间复杂度

2.搜索算法:递归+枚举

  1)深度优先搜索算法:先深入,再退回,再广度

    水管问题

  2)广度优先搜索算法:先广度,再排除,再深入

    漫水填充法

3.图算法:利用特制的线条算图求得答案的一种简便算法。无向图、有向图和网络能运用很多常用的图算法,这些算法包括:各种遍历算法(这些遍历类似于树的遍历),寻找最短路径的算法,寻找网络中最低代价路径的算法,回答一些简单相关问题(例如,图是否是连通的,图中两个顶点间的最短路径是什么,等等)的算法。图算法可应用到多种场合,例如:优化管道、路由表、快递服务、通信网站等。

  1)floyd-warshall算法:只需5行代码。使用穷举法,遍历所有2点间的距离,是否比它们之间加入其它点中转要短

  2)dijkstra算法:

附录:

时间复杂度:

我们用大写字母 O来表示时间复杂度,因此如果算法的时间复杂度是 O(m+n+m+n)即 O(2*(m+n))。我们在说时间复杂度的时候可以忽略较小 的常数,最终桶排序的时间复杂度为 O(m+n)。还有一点,在表示时间复杂度的时候,n 和 m 通常用大写字母即 O(M+N)。

原文地址:https://www.cnblogs.com/xujanus/p/8960833.html