算法知识学习手册

数据结构与算法框架 images

排序基于复杂度分类

比较的排序算法的执行过程,会涉及两种操作,一是元素比较大小,另一种是元素交换或移动。

原地排序(Sorted in place)算法,是特指空间复杂度是 **O(1)**的排序算法。

双循环排序 O(n2)

适合小数据量排序

分组排序 O(nlogn) 用到了分治**,适合大数据量排序

归并排序是由下到上的,先处理子问题,然后再合并,归关排序虽然是稳定的排序,但不是原地排序算法。

快速排序是相反的,处理过程是由上到下的,先分区,然后再处理子问题。

下面三种都是叫,线性排序,之所以叫做线性的时间复杂度,主要是下面三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作,但是对排序数据的要求很苛刻。

其它偏排序

猴子排序 睡眠排序 面条排序

如何分析一个"排序算法"的好坏?

  • 排序算法的执行效率
  1. 最好情况,最坏情况,平均情况时间复杂度
  2. 时间复杂度的系数、常数、低阶
  3. 比较次数和交换(或移动)次数
  • 排算算法的内存消耗 算法的内存消耗可以通过空间复杂度来衡量,原地排序,是特指空间复杂度是 O(1) 的排序算法。

  • 排序算法的稳定性 稳定性是指,如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。

images

递归

动态规划

贪心算法

循环vs迭代vs遍历

共同点在于,都是通过一个多次的重复的操作计算出最终的结果。

  • 遍历,依次对集合中的每个元素做且公做一次访问
  • 递归,不断通过自身调用去缩小范围b,直到找到或尽头返回。使用调用自身函数来触发。
  • 迭代,是执行很多次,每次都运行上一次的结果,来向目标推进一点,直到找到结果。使用 while, for 循环条件来运行。

递归算法复杂度,要根据递归的关系来算出来。

images

随机算法

优秀文章

广义定义: 数据结构就 是指一组数据的存储结构。 算法就是操作数据的一组方法。

狭义 是指队列,栈,堆,二分查找,动态规划等。

数据结构和算法是相辅相成的,数据结构是为算法服务的,算法要作用在特定的数据结构之上。

数据结构

数据结构

按位操作符

按位操作符

资料引用

数据结构与算法之美_王争