败血症的治疗

注册

 

发新话题 回复该主题

c编程中,什么是算法 [复制链接]

1#

一、什么是算法?

算法就是解决一个实际问题的方案和具体步骤。

特征:

1、可行性:算法中的每一条指令都能够被精确地执行。

2、确定性:算法中的每一条指令都必须有明确的含义,无二义性。

3、有限性:一个算法必须在执行有限步骤之后结束,且每一步都在有限的时间内完成。

4、输入、输出:一个算法有0个或多个输入,有1个或多个输出。也就是说,一个算法可以没有输入,但必须要有输出。

二、如何描述算法:

由于人类的语言容易产生歧义,因些,我们用流程图来描述算法。就是使用一组特定的图形符号加简明扼要的文字说明一来描述算法的图。

如图:

常用的程序结构:顺序结构、分支(选择)结构和循环结构,它们分别的流程图:

1、顺序结构:

2、分支(选择)结构:

3、循环结构:

三、如何设计算法:

一个好的算法应具备以下4个重要特性:

正确性:算法的执行结果应当满足预先规定的功能和性能要求。

简明性:算法要思路清晰、层次分明、容易理解、利于编码和调试。

高效性:算法要有效使用存储空间,并具有高的时间效率。

最优性:算法的执行时间已达到求解该类问题所需时间的下界。

四、常见的算法:

1、分治法、即“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

分治法在每一层递归上都有三个步骤:分解,解决,合并。

示例:阶乘、斐波纳契数列、汉诺塔问题。

2、动态规划:

核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)动态规划可以通过填表的方式来逐步推进,得到最优解。

示例:0-1背包问题,钢条切割问题。

3、贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。

示例:背包问题,均分纸牌,最大整数。

4、回溯法是一种搜索算法,从根节点出发,按照深度优先搜索的策略进行搜索,到达某一节点后,探索该节点是否包含该问题的解,如果包含则进入下一个节点进行搜索,若是不包含则回溯到父节点选择其他支路进行搜索。

示例:0-背包问题、旅行商问题、八皇后问题。

分享 转发
TOP
发新话题 回复该主题