C/C++教程

C++——算法设计方法

本文主要是介绍C++——算法设计方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

贪婪算法。
分而治之。
动态规划。
回溯法。
分支定界。

一、贪婪算法

(1)最优化问题。每个最优化问题都包含一组限制条件和一个优化函数。符合限制条件的问题求解方案称为可行解。使优化函数可能取得最佳值的可行解称为最优解

(2)在贪婪算法中,我们需要逐步构造一个最优解。每一步,我们都在一定的标准下,做出一个最优决策。在每一步做出的决策,在以后的步骤中都不可更改。做出决策所依据的标准称为贪婪准则

(3)不保证得到最优解,但得到的结果通常都接近最优解,这种算法称为启发式方法。具有限定性能的启发式方法称为近似算法

(4)任务和任务的先后顺序可用有向图表示,称为顶点活动网络AOV)。

(5)货箱装载:从剩下的货箱中,选择重量最小的货箱。
0/1背包问题:从剩余的物品中选出可以装入背包的价值最大的商品;从剩余的物品中选出可以装入背包的重量最小的商品;从剩余的物品中选出可以装入背包的(价值除以重量)最大的商品;
拓扑序列、拓扑排序。
二分覆盖:从A中选择一个顶点,它最大数量的覆盖了B中还未被覆盖的元素。
单元最短路径:从一条最短路径还没有到达的顶点中,选择一个可以产生最短路径的目的顶点。
最小成本生成树:从剩下的边中选择一条成本最小且不会产生环路的边加入已选择的边集。

二、分而治之

(1)最大最小问题、矩阵乘法、排序、选择、残缺棋盘问题、在二维空间中寻找距离最近的两个点。

(2)要解决一个问题的大实例,可以把它分成两个或多个更小的实例,然后分别解决每个小实例,最后把这些小实例的解组合成原始大实例的解。
小实例可以使用分而治之策略递归求解。

(3)一般都是用一个栈来模拟递归栈。也可以用非递归程序实现分而治之方法。

(4)归并排序:归并过程将两个排序后的子序列归并在一起。
快速排序:选择一个元素作为支点,组成中间段。剩余元素分为左端和右端,左端的元素关键字都不大于支点关键字,右端的元素关键字都不小于支点的关键字。(可根据三值取中规则选择支点元素)

(5)各种排序算法见超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白、十种排序算法

(6)状态空间方法。

三、动态规划

(1)对一个问题的解是一系列抉择的结果。

(2)步骤:
证实最优原则是适用的;
建立动态规划的递归方程式;
求解动态规划的递归方程式以获得最优解;
沿着最优解的生成过程进行回溯。

四、回溯法

(1)回溯法和分支定界法是对候选解进行系统检查的两种方法。

(2)步骤:
定义一个解空间,它包含对问题实例的解;
用适合于搜索的方式组织解空间;
用深度优先方式搜索解空间,利用界定函数避免进入无解的子空间。

五、分支定界

这篇关于C++——算法设计方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!