算法思想

基础算法思想类别

  1. 递推算法

  2. 枚举函数

  3. 递归递归

  4. 分治游戏

  5. 贪婪基础

  6. 回溯(试探)搜索

  7. 模拟

递推

递推分类

  1. 顺推法:从已知条件出发,逐步推算出要解决问题的方法。
  2. 逆推法:从已知结果出发,用迭表明达式逐步推算出问题开始的条件,即顺推法的逆过程。

递推算法的经典运用

斐波那契数列(顺推法):由n-2,n-1项获得第n项银行存款(逆推法)循环


枚举

将问题的全部可能答案都列举出来,根据判断条件判断此答案是否合适,通常用循环实现。方法

枚举算法的经典运用

百钱买百鸡、填写运算符比赛


递归

  1. 递归算法在函数或子过程的内部,直接或间接调用本身的算法
  2. 递归算法其实是把问题转化为规模缩小了的同类问题的子问题,而后再递归调用函数或过程来表示问题的解

注意:必须有一个明确的递归结束条件;若是递归次数过多,容易形成栈溢出。while

递归算法的经典运用

汉诺塔问题、阶乘问题


分治

  将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解,就可获得原问题的解。

分治算法的基本步骤

  1. 分解,将要解决的问题划分红若干个规模较小的同类问题
  2. 求解,当子问题划分得足够小时,用较简单的方法解决
  3. 合并,按原问题的要求,将子问题的解逐层合并构成原问题的解

分治算法的经典运用

大数相乘问题、比赛日程安排


贪心

从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。

贪心算法的局限

  • 不能保证最后的解是最优的;
  • 不能求最大最小解问题;    
  • 只能求知足某些约束条件的可行解范围。

贪心算法的基本过程

 1. 从问题的某一初始解出发    

  1. while能向给定总目标前进一步   
  2. 求出可行解的一个解元素     
  3. 由全部解元素组合成问题的一个可行解

贪心算法的经典运用

装箱问题、找零方案


试探

  在试探算法中,放弃当前候选解,并继续寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。

  (为求得问题的正确解,会先委婉地试探某一种可能状况。在进行试探过程当中,一旦发现原来选择的假设状况是不正确的,立刻会自觉地退回一步从新选择,而后继续向前试探。反复进行,直到获得解或证实无解时才死心)

试探算法的基本步骤

    1.针对所给问题,定义问题的解空间

    2.肯定易于搜索的解空间结构

    3.以深度优先方式搜索解空间,并在搜索过程当中用剪枝函数避免无效搜索

试探算法的经典运用

八皇后问题、29选7彩票组合

模拟

对真实事物或者过程的虚拟。

模拟算法的经典运用

猜数字游戏、掷骰子问题

相关文章
相关标签/搜索