经典算法归纳(c语言)
实现算法的一般步骤
1.分析理解、抽象和归纳问题
2.寻找解决问题的算法过程思路
3.用数学语言符号将其表示出来
4.选用合适的数据结构并编程
5.评估该算法
怎么去描述算法
自然语言---->流程图--->伪代码--->程序语言
算法的复杂度描述
算法的时间复杂度是指 执行算法所需要计算的工作量。算法的时间复杂度是一个函数,它定量的描述了算法的运行时间。
算法的空间复杂度是指 算法需要消耗的内存空间。算法的空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量。
经典的算法策略
1.枚举算法
也叫穷举算法(暴力破解法),是一种针对要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的约束条件,从而得到问题的解。
枚举算法的思路
第一步:确定解题范围,枚举出所有可能的题解 第二步:判断解题是否符合正解的条件 第三步:使可能解的范围降至最小,以便提高解题效率。
枚举算法案例
百钱买百鸡问题:我国古代数学家在《算经》一书中提出的数学问题:鸡 翁一值钱五,鸡 母一值钱三,鸡雏三值钱一。百钱买百鸡,问 鸡翁、鸡 母、鸡雏各几何?
破译密码问题:用“字典”锁定密码在某个范围,可以缩短破译时间
2.递推算法
通过已知条件,利用特定关系得出中间推论,直到得出结果。分为逆推和顺推两种。
递推算法思路:将一个复杂庞大的计算过程转化成简单过程的多次重复。
第一步:确定问题的数据信息之间存在着特定的递推关系;第二步:逐步推断;第三步:尽量使用简单变量,减少耗能。
递推算法案例:斐波那契序列和杨辉三角形
3.递归算法
将问题转化为规模缩小了的同类问题的子问题,然后通过递归调用来表示问题的解,分为直接递归和间接递归
递推与递归的比较:递推算法通常采用数组,递归算法采用栈,递推效率较高
递归算法思路
第一步:确定递归公式,将问题化为子问题求解,子问题求解的方法与原问题相同;第二步:确定边界,递归的次数必须是有限的;第三步:构架调用自身函数的子过程
递归算法案例:求n!(阶乘问题)和汉诺塔问题
4.迭代算法
也称为辗转法,是一种不断用变量的旧值递推新值的过程,分为精确迭代和近似迭代。最常见的迭代算法是牛顿法(一种在实数域和复数域近似求解的方法)
迭代算法的步骤:
第一步:确定迭代变量;第二步:建立迭代关系式;第三步:对迭代过程进行控制;
迭代算法案例:最大公约数问题(欧几里得的辗转相除法)
5.分治算法
缩小问题的规模,分而治之
分治算法的思路
第一步:分解;第二步:求解;第三步:合并
分治算法案例:
信息搜索定位问题(折半查找法),排查假币问题
6.贪心算法
针对范围相对广泛的许多问题能产生整体最优解,增加候选对象,得到整体最优解
贪心算法的思路:
第一步:建立数学模型来描述问题;第二步:把求解的问题分为若干个子问题:第三步:得到子问题的局部最优解;第四步:合并最优解
贪心算法案例:最大整数(n个整数连接成一排,组成一个最大的多位整数)
这个案例我还不太会,有会的同学可以一起探讨一下(嘻嘻)
7.回溯算法
回溯法回溯到根节点,且根节点的所有子树都被搜索遍才结束,在搜索过程中产生解
回溯算法的思路:
第一步:定义问题的解空间;第二步:确定易于搜索的解空间结构;第三步:以深度优先的方式搜索解空间,并用剪枝函数避免无效搜素
回溯算法典型案例:迷宫问题和n皇后问题
经典算法归纳(c语言)相关推荐
- c语言常用算法归纳,C语言常用算法
一.计数.求和.求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值.终值或结束条件,更要注意用来表示计数.和.阶乘的变量的初值. 例:用随机函数产生100个[0,99]范围内的随 ...
- c语言常用算法分析 微盘,C语言常用算法归纳.pdf
C 语言常用算法归纳 应当掌握的一般算法 一.基本算法: 交换.累加.累乘 二.非数值计算常用经典算法: 穷举.排序(冒泡,选择).查找(顺序即线性) 三.数值计算常用经典算法: 级数计算(直接.简接 ...
- 十种经典排序算法精粹(c语言版本)
下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...
- 【每日算法】C语言8大经典排序算法(2)
接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...
- C语言经典算法 21-30
目录 21 一个有序的数组插入一个数 22 将一个数组逆序输出 23 报号 求最后是谁 24 写一个统计字符串长度的函数 25 八进制转换为十进制 26 判断一个素数能被几个 9 整除 27 输入一组 ...
- C语言经典算法 11-20
C语言经典算法 11-20 十一.求最大公约数和最小公倍数 十二.统计字符串数字,字母,符号的各个数量 十三.2+22+222+..... 十四.完数 十五.小球反弹问题 十六.猴子吃桃问题 十七.求 ...
- C语言经典算法 1-10
目录 一.排列组合题 二.区间题 三.判断平方数相关 四.给你一个年月日判断是第几天 五.将3个数由小到大排序 六.九九乘法表 七.兔子繁殖数列 八.判断素数 九.水仙花数 十.因数分解 一.排列组合 ...
- c语言经典算法大全pdf,c语言经典算法100例pdf版.pdf
c语言经典算法100例pdf版 C 语言经典算法 100 例 C 语言编程经典 100 例 A:[程序1] 题目:有1.2.3.4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程 ...
- 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...
- 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)
C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...
最新文章
- Win10-OpenCV双目相机开发
- [BZOJ1106/POI2007]Tet立方体大作战
- Elasticsearch之基本操作
- 复旦大学肖仰华教授:知识图谱与认知智能 | 附PPT下载
- AngularJS:表达式
- EJB 3.x:生命周期和并发模型(第1部分)
- RT-Thread--线程管理
- 配置sqlplus的AUTOTRACE
- ajax、axios、fetch之间的详细区别以及优缺点
- 计算机释放内存的命令,如何设置电脑Win7自动释放内存空间?
- ubuntu16安装搜狗输入法教程
- 微软“玻璃硬盘”问世:2毫米杯垫大小可存储75.8G数据,1000年不坏!
- 在linux中安装google拼音输入法
- java绘制棋盘_java绘制五子棋棋盘
- Mapreduce入门--词频统计
- iftop相关参数及说明
- LLVM 与 Clang 介绍
- Qt修改鼠标样式为自定义图标
- 国庆六日游——第三天第一题
- SQL server用户