大家好,这是我第一次写博客,准备跨考研计算机专业

希望自己能把所学都写下来,无论考研成功与否,这些东西学了以后肯定能帮助自己在茫茫人海中找到一席之地。

首先开始学习的是数据结构中的算法设计的基本方法,掌握一些常用的算法设计方法,对于探寻问题求解思路是很有用的。

几种基本的算法设计方法,包括穷举法、迭代法、递推法和递归法。(四种)更复杂的算法设计方法,如回溯法、贪心法、分治法、动态规划和分支定界等,后作介绍。

1.穷举法

又称枚举法,基本思想是:

  1. 首先根据求解问题的部分条件分别列举各种可能解;
  2. 验证每一可能解是否满足条件,若是则可得出求解问题的解,若全部情况验证后均不符合求解问题的条件,则问题无解。

为了避免重复试探,应保证列举过的可能解在后面不再列举,大致有以下两种方法:

  1. 按规则列举;
  2. 盲目列举。(要随时检查当前的列举是否重复,要指示器k加下,需要消耗存储空间)

下面我们来看看例题:

【例1-14】求解小于等于某个整数n的最大素数。使用穷举法需要从n到√n,逐个用2到√n的整数来整除,若能除尽则不是素数。

#include <math.h>      //有求平方根函数sqrt的定义int primeCalc(int n){//求小于等于整数n的最大素数,通过函数返回值返回其结果int i,j,d=sqrt(n);for (i=n;i>=d;i--){ //从大到小逐一检查j=2;while (j<=d)if(i%j==0)break;  //余数为0则能整除else j++;if(j>d)return i;      //不能整除j所有取值的整数i即为最大素数}}

穷举法的特点是算法简单,但有时运算量大,效率较低。

在可以确定解的取值范围,但一时有找不到更好的算法时,就可以使用穷举法求解。

2.迭代法

由一个量的原值求出它的新值,不断地再用新值替代原值求出它的下一个新值,直到得到满意的解。

新值与原值之间存在一定的关系,这种关系可以用一个公式来表示,称为迭代公式。

迭代法主要用于那些很难或无法用解析法求解的一类计算问题,如高次方程、超越方程和大型线性方程组等;

它能使复杂问题的求解过程转化为相对较简单的迭代算式的重复执行过程,用数值方法求出问题的近似解。

[例1-15]
计算√a。设√a=x,则x²-1=a-1,若把x看做未知数,则问题转化为解方程x²-1=a-1,变换该方程得(x-1)(x+1)=a-1,移项得

最终得到一个多级的连分式。
相应地可得到x的迭代计算式:

[程序1-16]
迭代计算a的平方根。

float sqrtCalc(float a){float precision=0.0001;float x,x0;x=1;do {x0=x;x=1+(a-1)/(1+x);}while(x-x0>precision||x0-x>precision);return x;
}

程序中precision是迭代控制精度

此法称作逼近迭代,其需要有一个收敛速度快的迭代公式和一个迭代初值,以及解的精度控制要。

通过循环实现迭代过程,其终止循环的条件是前后两次得到的近似值之差的绝对值小于解的精度控制要求,并认为最后一次得到的近似解为问题的解。

作者 余国煜 [200212]

1.算法设计的基本方法(一)相关推荐

  1. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

  2. C语言求解距多个点最短长度,算法设计技巧与分析课后习题答案沙特

    算法设计技巧与分析课后习题答案沙特[篇一:高级算法设计实验指导书2009(李淑琴)] =txt>一.适用专业 计算机科学与技术专业研究生 二.实验目的与任务 算法分析与设计是计算机科学与技术专业 ...

  3. 算法设计之—直接 遍历/穷举法、贪心算法、动态规划、回溯法、EM方法

    算法是对完成特定问题的程序执行序列描述,表象为从问题初始状态到问题结束状态的所有路径之中寻找可行路径,若无先验经验,根据执行方式不同可以划分为无规则和有规则(启发式)方法. 无规则方法为穷举,改进方法 ...

  4. 【算法设计与分析】14 分治算法的一般描述和分析方法

    本文主要描述分治算法的一般描述和分析方法.衔接上一篇文章:[算法设计与分析]13 分治策略的设计思想 文章目录 1 分治算法的一般性描述 1.1 分支算法的时间分析 1.2 两类常见的递推方程与求解方 ...

  5. 【算法设计与分析】08 序列求和的方法

    本篇文章学习数列求和的一些方法.这些方法对后面学习算法的时间复杂度非常有帮助. 文章目录 1. 数列求和公式 1.1 二分搜索的时间复杂度求解 2 估计和式上届的放大法 3 估计和式渐近的界 4 总结 ...

  6. 1123581321递归算法java_经典算法设计方法

    本文转自博客园 一.什么是算法 算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.算法常常含有重复的步骤和一些比较或逻辑判断.如果一个算法有缺陷,或不适合于 ...

  7. 温度补偿 matlab,基于传感器温度补偿方法的双指数函数模型的温度补偿算法设计...

    描述 0 引言 目前基于传感器的温度补偿方法主要分为模拟硬件设计和数字信号处理两种方法.模拟硬件通常采用PTAT 和CTAT 等技术来设计读出电路.数字信号处理方法通常包括线性拟合.最小二乘多项式 拟 ...

  8. c语言中分不分大小写,C语言高级语言程序设计(一)-第四章 程序设计方法-模块化与算法设计.ppt...

    高级语言程序设计(一) (C Programming),第四讲:程序设计方法-模块化与算法设计,本章目标,进一步掌握模块化设计思想 掌握常用的数据查找及排序方法 了解全局变量 了解递归程序设计思想,问 ...

  9. 算法设计方法:递归的内涵与经典应用

    摘要: 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归.毋庸置疑地,递归确实是一个奇妙的 ...

最新文章

  1. Python基础知识(第五天)
  2. 状态压缩:枚举子集(最优组队)(ybtoj)(动态规划)
  3. 三种不使用中间参数,交换两个参数的值的方法
  4. 一道小学数学题引发的“纷争” 产科医生给出解答
  5. 苹果发布 macOS 12——Monterey
  6. nlv sqlserver_SQLServer数据类型
  7. 计算机辅助翻译课怎么学的,计算机辅助翻译原理与实践
  8. 动态数据的国际化、几种主要的国际化标签
  9. python两组数的差异_Python中两个日期之间的差异
  10. UML类图几种关系的总结,泛化 = 实现 组合 聚合 关联 依赖
  11. 系统如何删除被其它进程占用的文件?
  12. Django总叙(转)
  13. 深度技术 Windows 7 SP1 x64 极速装机版 V2013.05
  14. tongweb设置gzip
  15. 安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换
  16. Centos7固定内网IP并允许访问外网
  17. 人力资源管理案例选读【2】
  18. CVPR 2022 | 基于密度与深度分解的自增强非成对图像去雾
  19. 为您详解在ChemDraw中进行3D建模的方法
  20. linux键盘控制鼠标软件下载,手机控制电脑软件(Mouse Server)

热门文章

  1. App Store 隐私政策
  2. python的前端和后端_python前端和后端数据交互,tornado框架入门,初学小试牛刀!...
  3. 艾司博讯:拼多多新店前期运营注意事项
  4. matplotlib画图之线条控制
  5. 40张风韵别致的海报设计(经典欣赏)
  6. 接入了一个比较冷萌的第三方环迅h5网关支付,发起订单以及同步/异步回调(文档中也有官方微信支付宝接入代码资源哦)
  7. php中退出的时候弹框显示,php – 浏览器关闭时显示弹出窗口
  8. 波音推出自动驾驶巨型无人机 可载重两头小象
  9. MySQL 清除数据库全部数据 重置ID从0开始
  10. 月亮在没人看时存在吗?实在性和量子理论