标签:用途 彩票 解决问题 任务 str 结果 利用 代码 语言
一丶基本概念
1.算法设计的任务:对一个具体的问题,设计一种良好的算法,获取最佳的结果.
2.什么是算法:通俗说是一种最优解,
3.程序=数据结构+算法+程序设计语言
二丶基础算法
1.枚举(穷举)算法思想
特点:1.依赖于计算机强大的运算能力来穷尽每一个可能的情况,从而达到解决问题的目的.
2.该算法效率不高.
3.该算法适用于一些没有规律可循的环境中.
两个必要条件:1.对于一种可能的情况,计算其结果.
2.判断结果是否满足要求,如果不满足,则执行第一步.
示例1:填数字游戏
算法描述题
X 算
----------------
题题题题题
示例2:填运算符游戏
5 5 5 5 5 5 = 5
2.递推算法思想
适用环境:适用于有明确公式的情况,通过已知条件,利用特定关系得出中间推论,逐步递推,直到得出结果.
递推核心:利用已有信息推出新的东西.
(1)顺推法(求结果)
从已知条件出发,逐步推算要解决的问题.
示例1:斐波那契额数列的推导(生小兔子模型)
(2)逆推法(求条件)
从已知结果出发,用迭代表达式逐步推算出问题开始条件.
示例1:该存多少钱
3.递归算法思想
用途:该算法可以有效解决一些问题,往往可以简化代码的编写,但若有不适合的递归,反而导致效率低.
核心:不断通过反复调用自身来求解问题.待求解问题可以分解为相同的一个子问题.
三要求:1.每循环调用一次,求解问题的规模要有所缩小.
2.相邻两次循环之间有紧密的联系,前一次要为后一次做准备
3.当子问题规模极小时,应该能直接给出答案而不再进行递归调用(即有一个结束递归的条件),否则导致堆栈溢出.
注意三点:1.递归效率低,
2.递归必须要有一个递归出口
3.递归调用过程中,系统将每一次递归调用的返回点.局部量等保存在系统的栈中.
示例1:求阶乘
示例2:数制转换
3.分治算法
核心:将一个复杂的问题分解为若干个子问题来进行求解,子问题比较大分解为更小的子问题求解.
特征:1.求解问题可以分为若干个规模较小的相同问题
2.求解问题规模分解到一定程度,就很容易求解
3.合并子问题的解可以得到求解问题的解
4.由求解问题所分解出的各个子问题是相互独立的
分治算法和递归算法同时使用,可以产生许多高效的算法.
分治算法的设计分为以下三步:1.分解2.求解3.合并
示例1:乒乓球赛日程安排
4.贪婪算法
核心:局部最优,得出最优近似解
示例1:找零钱
示例2:换零钱
5.试探算法思想(也称回朔法)
核心:系统的搜索问题解的方法,例如选手下棋
思路:从问题的某一种状态出发,搜索这种状态出发所有能达到的状态,当一条路走到尽头的时候,退后几步,接着出发.
试探算法一般采用递归形式编写
示例1:生成彩票号码组合
6.模拟算法
示例1:猜数字游戏
示例2:模拟掷骰子
算法基础知识
标签:用途 彩票 解决问题 任务 str 结果 利用 代码 语言
原文地址:https://www.cnblogs.com/cangshuchirou/p/8780267.html