算法通用设计技术小结

前言

 除了数据结构的知识以外,编写代码我们也需要了解通用的算法设计技术,这里做一个小结。


1 蛮力法

 蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义。

 虽然巧妙和高效的算法很少来自于蛮力法,但我们不应该忽略它作为一种重要的算法设计策略的地位。第一,和其他某些策略不同,我们可以应用蛮力法来解决广阔领域的各种问题。实际上,它可能是唯一一种几乎什么问题都能解决的一般性方法。第二,对于一些重要的问题(例如排序、查找、矩阵乘法和字符串匹配)来说,蛮力法可以产生一些合理的算法,它们多少具备一些实用价值,而且不必限制实例的规模。第三,如果要解决的问题实例不多,而且蛮力法可以用一种能够接受的速度对实例求解,那么设计一个更高效算法所花费的代价很可能是不值得的。第四,即使效率通常很低,仍然可以用蛮力算法解决一些小规模的问题实例。

用例选择排序冒泡排序顺序查找、蛮力字符串匹配、最近对和凸包问题蛮力算等。

2 减治法

 减治技术利用了一个问题给定实例的解和同样问题较小实例的解之间的某种关系。一旦建立了这种关系,我们既可以从顶至下,也可以从低至上地运用关系。减治法有3种主要的变化形式:

  • 减去一个常量(插入排序、拓扑排序)
  • 减去一个常量因子(折半查找、假币问题、约瑟夫斯问题)
  • 减去的规模是可变的(欧几里得算法、拈游戏、插值查找)

3 分治法

 分治法是按照以下方案工作的:

(1)将一个问题划分为同一类型的若干子问题,子问题最好规模相同

(2)对这些子问题求解(一般使用递归方法,但在问题规模足够小时,有时会利用另一个算法)

(3)有必要的话,合并这些子问题的解,以得到原始问题的答案。

例如:合并排序快速排序、二叉树遍历、大整数乘法、Strassen矩阵乘法

4 变治法

 变治法分成两个阶段,首先在“变”的阶段,处于这样或那样的原因,把问题的实例变得更容易求解。然后,在第二个阶段或者说“治”的阶段,对实例进行求解。

 变治思想主要有3种类型:

  • 变换为同样问题的一个更简单或者更方便的实例——称之为实例化简
  • 变换为同样实例的不同表现——称之为改变表现
  • 变换为另一个问题的实例,这种问题的算法是已知的——称之为问题化简

例如:在求解问题查询问题时可以先预排序,计算高斯消去法可以利用矩阵操作

5 时空权衡

 利用空间换时间,利用时间换空间。

例如:计数排序先进行预处理,散列法,B树构造

6 动态规划

 如果问题是由交叠的子问题构成的,我们就可以用动态规划技术来解决它。

例如:币值最大化问题、找零问题、硬币收集问题、背包问题。

7 贪婪技术

 贪婪技术的核心是所做的每一步都必须满足以下条件:

  • 可行的:即它必须满足题目的约束
  • 局部最优:它是当前步骤中所有可行选择中最佳的局部选择
  • 不可取消:即选择一旦做出,在算法后面的步骤就无法改变了

例如:Prim算法、Kruskal算法、Dijkstra算法、哈夫曼树及编码

8 迭代改进

 不断优化可行解

例如:求解线性规划最优解的单纯形法、求解传输网络最大流量问题、二分图的最大匹配

9 回溯法

 每次只构造解的一个分量,然后按照下面的方法来评估这个部分构造解。如果一个部分构造解可以进一步构造而不会违反问题的约束,我们就接受对解的下一个分量所做的第一个合法选择。如果无法对下一个分量进行合法的选择,就不必对剩下的任何分量再做任何选择了。在这种情况下,该算法进行回溯,把部分构造解的最后一个分量替换为它的下一个选择

例如:n皇后问题、哈密顿回路问题

10 分支界限法

 与回溯法相比,分支界限法需要两个额外的条件:

  • 对于一颗状态空间树的每一个节点所代表的部分解,我们要提供一种方法,计算出通过这个部分解繁衍出的任何解在目标函数上的最佳值边界
  • 目前求得的最佳解的值

例如:分配问题、背包问题


后记

 之后就是不断的练习总结才能更好的掌握数据结构与算法。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

threecat.up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值