第八章 算法分析设计
- 算法基础:算法基础知识、算法分析基础、查找、排序、常用算法原理
1.算法基础知识
- 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。算法的五个重要特性:
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
- 算法的复杂度
2.查找
-
顺序查找:将待查找的关键字key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功;否则,则查找失败。
-
时间复杂度为 O ( n ) O(n) O(n)
-
折半(二分)查找:设查找表的元素存储在一维数组r[1…n]中,在表中元素已经按照关键字递增方式排序的情况下,进行折半查找的方法是:
- 首先将待查元素的关键字(key)值与表r中间位置上(下标为mid)记录的关键字进行比较,若相等,则查找成功;
- 若key>r[mid].key,则说明待查记录只可能在后半个子表r[mid+1…n]中,下一步应在后半个子表中查找;
- 若key<r[mid].key,则说明待查记录只可能在前半个子表r[1…mid-1]中,下一步应在前半个子表中查找;
- 重复上述步骤,逐步缩小范围,直到查找成功或子表为空失败时为止。
- 要注意两点:中间值位置求出若为小数,应该向下取整,即4.5=4。中间值已经比较过不相等,再划分下一次比较区间时,无需将中间值位置再纳入下一次比较区间。
- 折半查找的时间复杂度为 O ( l o g 2 n ) O(log_2^n) O(log2n)
-
散列(哈希)表:根据设定的哈希函数H(key)和处理冲突的方法,将一组关键字映射到一个有限的连续的地址集上,并以关键字在地址集中的“像”作为记录在表中的存储位置。
3.排序
- 排序的分类:
- 稳定与不稳定排序
- 内排序和外排序
- 排序的算法分类可分为:
- 插入类排序:直接插入排序、希尔排序。
- 交换类排序:冒泡排序、快速排序。
- 选择类排序:简单选择排序、堆排序。
- 归并排序
- 基数排序
3.1直接插入排序
3.2希尔排序
3.2简单选择排序
3.3堆排序
3.4冒泡排序
3.5快速排序
3.6归并排序
3.7基数排序(了解)
4.排序算法总结
5.分治法
- 递归:指子程序(函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的常用方法。
- 递归的两个基本要素:边界条件、递归模式
- 分治法:对于一个规模为n的问题,若该问题可以容易的解决则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归的解决这些子问题,然后将各子问题的解合并得到原问题的解。
- 步骤:分解—求解—合并。
- 凡是涉及到分组解决的都是分治法(二分查找、归并排序等)
6.回溯法
- 可以理解为先进行深度优先搜索,一直向下探测,当此路不通时,返回上一层探索另外的分支,重复此步骤,这就是回溯。意为先一直探测,当不成功时再返回上一层。
- 一般用于解决迷宫类的问题
7.动态规划法
- 在求解问题中,对于每一步决策,列出各种可能的局不解,再依据某种判定条件,舍弃哪些肯定不能得到最优解的局部解,在每一步都经历筛选,以每一步都是最优解来保证全局是最优解。
- 本质也是将复杂的问题划分成一个个子问题,与分治法不同的是每个子问题间不是相互独立的,并且不会都相同。
- 常用于求解具有某种最优性质的问题
8.贪心法
- 总是做出在当前来说是最好的选择,而并不从整体上加以考虑,他只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择,因此耗费时间少,一般可以快速得到满意的解,但得不到最优解。
- 局部贪心,只针对当前的步骤取最优,而非整体考虑。
- 判断此类算法,就看算法是否每一步都取最优,并且整体题意没有透漏出最终结果是最优的。
9.分支限界法
-
与回溯法类似,同样是在问题的解空间树上搜索问题解的算法。
-
与回溯法的区别:
- 求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
- 以广度优先或以最小耗费(最大收益)优先的方式搜索解空间树。
-
从活节点表中选择下一个扩展节点的类型:
- 队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
- 优先队列分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
10.概率算法(了解)
- 概率算法:在算法执行某些步骤时,可以随机选择下一步该如何进行,同时允许结果以较小的概率出现错误,并以此为代价,获得算法运行时间的大幅度减少(降低算法复杂度)。
- 基本特征是对所求解问题的同一实例用同一概率算法求解两次,可能得到完全不同的效果。
- 如果一个问题没有有效的确定性算法可以在一个合理的时间内给出解,但是该问题能接受小概率错误,那么采用概率算法就可以快速找到这个问题的解。
- 四类概率算法:数值概率算法(数值问题的求解)、蒙特卡洛算法(求问题的精确解)、拉斯维加斯算法(不会得到不正确的解)、舍伍德算法(总能求得问题的一个正确解)。
11.近似算法
- 解决难解问题的一种有效策略,其基本思想是放弃最优解,而用近似最优解代替最优解,以换取算法设计上的简化和时间复杂度的降低。
- 虽然它可能找不到一个最优解,但它总会给待求解的问题提供一个解。
12.数据挖掘算法
- 分析爆炸式增长的各类数据的技术,以发现隐含在这些数据中的有价值的信息和知识。数据挖掘利用及其学习方法对多种数据进行分析和挖掘。其核心是算法,主要功能包括分类、回归、关联规则和聚类等。
13.智能优化算法(了解)
-
优化技术是一种以数学为基础,用于求解各种工程问题优化解的应用技术。
-
人工神经网络ANN:从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。
-
深度学习的概念源于人工神经网络的研究,是机器学习研究中的一个新的领域。
-
遗传算法:源于模拟达尔文的“优胜劣汰、适者生存”,其本意是在人工适应系统中设计一种基于自然的演化机制。
-
模拟退火算法SA:求解全局优化算法。基本思想来源于物理退火过程,包括三个阶段:加温阶段、等温阶段、冷却阶段。
-
禁忌搜索算法TS:模拟人类智力过程的一种全局搜索算法,是对局部领域搜索的一种扩展。
-
蚁群算法:是一种用来寻找优化路径的概率型算法。
-
粒子群优化算法PSO:又称为鸟群觅食算法,其行为不可预测,但其整体总保持一致性,个体与个体间也保持着最适宜的距离。通过对类似生物群体行为的研究,发现生物群体重存在着一种信息共享机制,为群体的进化提供了一种优势,这就是基本粒子群算法形成的基础。