算法图解
小结:
1、简介
- 二分查找的速度比简单查找快的多
- O(logn)比O(n)快。需要搜索的元素越多,前者比后者就快的越多。
- 算法运行时间并不以秒为单位。
- 算法运行时间时从其增速的角度度量的。
- 算法运行时间用大O表示法表示。
2、选择排序
- 计算机的内存可以比做成一大堆抽屉。
- 需要存储多个元素时,可以使用数组或链表。
- 数组的元素都在一起。
- 链表的元素时分开的,其中每个元素都存储了下一个元素的地址。(前一个元素包含下一个元素的搜索地址)
- 数组的读取速度很快。
- 链表的插入和删除速度很快。
- 在同一个数组中,所有元素的类型都必须相同。
3、递归
- 递归指的是调用自己的函数。
- 每个递归函数都有两个条件:基线条件和递归条件。
- 栈有两种操作:压入和弹出。
- 所有函数调用都进入调用栈。
- 调用栈可能很长,这将占用大量的内存。
4、散列表
- 散列表可用于缓存数据(例如,在web服务器上)
- 散列表非常适用于防止重复。
5、广度优先算法
- 广度优先搜索是否有从A到B的路径。如果有,广度优先搜索将找出最短路径。
- 面临类似于寻找最短路径的问题时,可以尝试使用图来创建模型,在使用广度优先搜索来解决问题。
- 有向图中的边为箭头,箭头的方向制定了关系的方向。
- 无向图中的边不带箭头,其中的关系是双向的。
- 队列是先进先出(FIFO)的。
- 栈是先进后出的。
6、狄克斯特拉算法
- 广度优先搜索用于在非加权图中查找最短路径。
- 狄克斯特拉算法用于在加权图中查找最短路径。
- 仅当权重为正时狄克斯特拉算法才管用。
7、贪婪算法
- 贪婪算法寻找局部最优解,企图以这种方式获得全局最优解。
- 对于NP完全问题,还没有找到快速解决方案。
- 面临NP完全问题时,最佳的做法是使用近似算法。
- 贪婪算法易于实现、运行速度快,是不错的近似算法。
8、K最近邻算法
- KNN用于分类和回归,需要考虑最近的邻居。
- 分类就是编组。
- 回归就是预测结果。
- 特征抽取意味着将物品转换为一系列可比较的数字(机器学习)
- 能否挑选合适的特征事关KNN算法的成败。