码迷,mamicode.com
首页 > 编程语言 > 详细

算法基础知识

时间:2018-04-10 17:47:51      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:用途   彩票   解决问题   任务   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!