二 算法
一 算法时间复杂度和空间复杂度计算规则:https://zhuanlan.zhihu.com/p/50479555
算法(Algorithm):是表示一个有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数;掌握算法需要理解数据和结构之间的关系。
1 时间复杂度:在 大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系。
常见的时间复杂度量级有:从上至下依次的时间复杂度越来越大,执行的效率越来越低。
- 常数阶O(1)
- 对数阶O(logN)
- 线性阶O(n)
- 线性对数阶O(nlogN)
- 平方阶O(n²)
- 立方阶O(n³)
- K次方阶O(n^k)
- 指数阶(2^n)
2 空间复杂度:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。空间复杂度比较常用的有:O(1)、O(n)、O(n²)
二 排序算法:JS数据结构和算法实现
- 选择排序:O(n*n):它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾
- 插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 冒泡排序(Bubble sort):是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,O(n*n)。冒泡排序实现
- 快速排序:O(n*logn): 是由冒泡排序演变而来,但是比冒泡排序要高效的多,所以叫快速排序。快速排序
- 归并排序:该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
- 计数排序:
- 希尔排序
三 检索算法:
- 简单查找:按顺序查找;线性时间O(n);
- 顺序查找:从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,或者直到列表结尾也没有找到。这种方法称为顺序查找,有时也被称为线性查找。适用于元素随机排列的列表。
- 二分查找:适用于元素已排序的列表。二分查找效率更高,但是必须在进行查找之前花费额外的时间将列表中的元素排序。
- 搜索图的算法主要有两种: 深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search)
推荐阅读:
数据结构在JS中的应用:https://github.com/biaochenxuying/blog/issues/43;