Skip to content

comwork2016/algorithm

Repository files navigation

algorithm

《计算机算法基础》书中练习 主要为python实现

##一、递归法 哪些问题可以用递归求解。如果同时满足以下3个要求:

  • 问题P的描述涉及规模, 即P(size);
  • 规模发生变化后, 问题的性质不发生变化;
  • 问题的解决有出口。

小实例:

  1. 最大值:求n个元素中的最在大值。
  2. 汉诺塔:汉诺塔问题。
  3. 全排列:求n个元素的全排列。
  4. 自然数拆分:任何一个大于1 的自然数n , 总可以拆分成若干 个小于n的自然数之和,试求n的所有拆分(用不完全归纳法)。
  5. 简单的0/1背包问题:设一背包可容物品的最大质量为m,现有n件 物品, 质量为m1 , m2 , ⋯ , mn,mi,均为正整数,要从n件物品中挑选若干件,使放入背包的质量之和正好为m。

##二、分治法 求解的思想就是将整个问题分成若干个小问题后分而治之。通常, 由分治法所得到的子问题与原问题具有相同的类型。
小实例:

  1. 二分查找
  2. 归并排序:给定一个含有n个元素的集合,把它们按一定的次序分类 (按非降次序分类)
  3. 快速排序

##三、贪心法 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解 。
贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
小实例:

  1. 带有限期的作业排序:来解决操作系统中单机、无资源约束且每个作业 可在等量的时间内完成的作业调度问题。
  2. 背包问题:采用装包方法使装入背包物品的总效益最大。
  3. Dijkstra python: or Dijkstra c++:求解单源点最短路径问题
  4. 最小生成树:
  5. 哈夫曼编码
  6. 会议安排

##四、动态规划 活动过程可以分为若干个阶段, 而且在任一阶段后的行为都仅依赖于i 阶段的过程状态, 而与i 阶段之前的过程如何达到这种状态的方式无关, 这样的过程就 构成一个多阶段决策过程
小实例:

  1. 多段图:
  2. Floyd:每对结点之间的最短路径。
  3. 最优成本二分检索树:详细说明见[印象笔记 ](https://app.yinxiang.com/shard/s66/nl/14320022/b8c14f2d-ba6e-4415-acfe-9152f8b38621?title=%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92_%E6%9C%80 %E4%BC%98%E4%BA%8C%E5%88%86%E6%A3%80%E7%B4%A2%E6%A0%91)
  4. 旅行商问题:详细说明见[印象笔记 ](https://app.yinxiang.com/shard/s66/nl/14320022/f18b63ed-2eea-4fdd-b880-8ddb5b4ebe0e?title=%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%20%E8%A7% A3TSP%20%E6%97%85%E8%A1%8C%E5%95%86%E9%97%AE%E9%A2%98)
  5. 最长公共子序列详细说明见[印象笔记 ](https://app.yinxiang.com/shard/s66/nl/14320022/26180721-eece-4f4d-b4c4-5be5b1c45335/?csrfBusterToken=U%3Dda8196%3AP%3D%2F%3AE%3D1567ee3c 285%3AS%3D7707069aa68e8d9248d534982f9174b7)

##五、回溯法 首先确定解空间组织结构,然后从根节点开始扫描,采用深度优先搜索的方式扫描整个树。

  1. 树的深度优先搜索
  2. 素数环
  3. N皇后问题包含递归和迭代两种算法

##六、分支界限法 在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。因此这种算法一般可以求得最优解。
1.单源最短路径问题

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published