《趣学算法算法 思路汇总》

算法的好坏标准 

  • 正确性:满足问题的需求,运行正常,无语法错误, 
    通过软件测试。
  • 易读性:简洁易懂,注释语句恰当适量。
  • 健壮性:算法对非法数据及操作有较好的反应和处理。
  • 高效性:算法运行效率高,即算法运行所消耗的时间短。
  • 低存储性:低存储性是指算法所需要的存储空间低。
  • 六字总结:高效率 低存储

第二章 贪心算法

一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择 

从而得到全局最优的解决方案。 


—《算法导论》 
- 贪心算法求解两个重要的特性 
(1)贪心选择 每一步都作出当前的最佳(何为最佳,策略不同,情况不同)选择 仅依赖于之前作出的选择 
(2)最优子结构 问题的最优解包含其子问题的最优解 
- 贪心算法秘籍 
(1)贪心策略 选择当前看上去最好的一个方案 如最大的 最值钱的 最重的 
(2)局部最优解 根据贪心策略,一步一步地得到局部最优解 
(3)全局最优解 所有的局部最优解合成为原来问题的一个最优解 
- 如何定义最优子结构 
        分解问题模型 缩小问题的规模 
        最优解子问题的分解结构和堆叠方式 
        分解结构:每一步都在前一步的基础上选择当前最好的解(钱币找零问题) 
        堆叠结构:分解成相对独立的几个子问题,最后进行合并(某种公式计算法则) 
- 贪心算法的缺陷 
         贪婪法每一步选择完之后,局部最优解就确定 
        不再进行回溯,之前选择不再修改,直到算法结束 
        贪心只有极少情况可以得到最优解 
         通常得到的是近似最优解,但是简单高效 
        省去了为找最优解可能需要的穷举操作 
- 贪心算法的典型应用 
        最优装载问题        背包问题        会议安排问题

第三章 分治法

  • 分治,顾名思义,分而治之。 

    大问题分解成一系列规模较小的相同问题,然后逐个解决小问题,即所谓的分而治之。分治法产生的子问题与原始问题相同,只是规模减小。

  • 分治法求解的三个条件 
    (1)原问题可分解为若干个规模较小的相同子问题。 分治 
    (2)子问题相互独立。单个问题的解不会影响到下个问题。 
    (3)子问题的解可以合并为原问题的解。 归并
  • 分治算法秘籍 
    (1)分解:将要解决的问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题,确保各个子问题的解具有相同的子结构 
    (2)治理:求解各个子问题。由于各个子问题与原问题形式相同,只是规模较小而, 
    而当子问题划分得足够小时,就可以用较简单的方法解决。 问题可以解决,直接解决,否则继续用相同的规则接着分解。 
    (3)合并:按原问题的要求,将子问题的解逐层合并构成原问题的解。 
    分治法的实现模式可以是递归方式,也可以是非递归方式,
  • 应用分治法的目的 
    (1)通过分解问题,使无法着手解决的大问题变成容易解决的小问题 
    (2)通过减小问题的规模,降低解决问题的复杂度(或计算量)

  • 递归和分治联系 
    问题的分解肯定不是一步到位的,反复调用,层层分解,自然导致了递归的调用。 
    分治法得到的子问题和原问题是相同的,当然可以用相同的函数来解决 
    区别只在于问题的规模和范围不同,可以通过参数来控制范围 
    递归同时也可以该用循环的方式,特别是尾递归(此部分后续会有单独的分析)
  • 分治算法的典型应用 
            二分搜索技术    
     合并排序    快速排序  

第四章 动态规划

动态规划解决复杂问题的思路也是对问题进行分解,通过求解小规模的子问题再反推出原问题的结果。动态规划也是把原问题分解为若干子问题,然后自底向上,先求解最小的子问题,把结果存储在表格中,再求解大的子问题时, 直接从表格中查询小的子问题的解, 避免重复计算, 从而提高算法效率。 


- 动态规划求解两个特性 
(1)最优子结构 问题的最优解包含其子问题的最优解 
(2)子问题重叠 有大量的子问题是重复的,记录结果,避免重复运算 

(3)无后向性 决策仅受之前决策的影响,不影响之后各阶段的决策 


- 动态规划秘籍 
(1)分析最优解的结构特征。 
(2)建立最优值的递归式。(也可以称为决策策略) 
(3)自底向上计算最优值,并记录。 

(4)构造最优解。 


- 如何建立最优值的递推式 
(1)定义最优子问题 确定问题的优化目标 
(2)定义状态 决策的结果(状态) 最终的结果(状态)就是最终解 
(3)定义决策和状态转换方程 状态递增的表达式(不一定是数学表达式) 
(4)确定边界条件 实际上就是递归终结条件,无需额外的计算
分析原问题最优解和子问题最优解的关系。考查有多少种选择。得到最优解递归式。  
以上的理解请不要陷入细节,更多的理解请从实际的案例中体会。问题的重复求解是动态规划提升的关键。
  • 动态规划的典型应用 
            青蛙上台阶问题 
            棋盘格跳马问题

  • 最长公共子序列     最大的子数组之和    编辑距离    游艇租赁  矩阵连乘      0-1背包问题


第五章 回溯法

回溯法是一种选优搜索法,按照选优条件深度优先搜索,以达到目标。当搜索到某一步 
时,发现原先选择并不是最优或达不到目标,就退回一步重新选择,这种走不通就退回再走 
的技术称为回溯法 
回溯法是一种“ 能进则进,进不了则换,换不了则退”的搜索方法。 
- 回溯法的算法要素 
首先要确定解的形式,定义问题的解空间 
解空间:顾名思义,就是由所有可能解组成的空间。解空间越小,搜索效率越高。 
一个问题的解空间通常由很多可能解组成,一定的组织结构搜索最优解, 
如果把这种组织结构用树形象地表达出来,就是解空间树。 
这里写图片描述 
隐约束指对能否得到问题的可行解或最优解做出的约束。如果不满足隐约束, 
就说明得不到问题的可行解或最优解,那就没必要再沿着该结点的分支进行搜索了, 
相当于把这个分支剪掉了 
显约束可以控制解空间大小,隐约束是在搜索解空间过程中判定可行解或最优解的。 
- 回溯法解题秘籍 
(1)定义解空间 确定解空间包括解的组织形式和显约束(范围限定) 
(2)确定解空间的组织结构 通常用解空间树形象的表达(只是辅助理解并不是真的树) 
(3)搜索解空间 按照深度优先搜索,根据限制条件,搜索问题的解 

- 回溯法的典型应用 

      0-1背包问题      最大团(护卫队) n皇后问题     地图m着色问题     最优加工顺序问题

       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值