基本算法学习

算法

1. 回溯算法


1.概述


  • 该算法可以系统性的搜索问题的所有解,它在问题的解空间树中按深度优先策略从根节点出发搜索解空间树
  • 该算法搜索至解空间任一节点时,先判断当前节点是否包含该问题 的解,如果肯定不包含,则跳过对以该节点为根的子树的搜索,逐层向其祖先节点回溯,否则进入该子树继续按深度优先策略搜索。
  • 要回溯到根,而且根节点的所有子树都被搜索遍才结束

2.步骤


  1. 定义问题的解空间
  2. 将解空间组织成树或者图的形式
  3. 遍历,并在搜索过程中剪枝函数避免无效搜索

3. 问题


  1. 有n-1种可选物品的0-1背包问题
    =2n1
    ,时间为
    O(n2n)
  2. 旅行售货员问题
    =(n1)!
  3. 装载问题(将n个集装箱装到2艘船上)
  4. 批处理作业调度
  5. 符号三角形问题
  6. n后问题

4. 避免无效搜索方法


  1. 使用约束函数在扩展节点处减去不满足约束的子树
  2. 用限界函数减去得不到最优解的子树

5. 子集树与排列树


  1. 子集树: 当所给的问题从n个元素的集合S中找出S满足某种性质的子集时,相应的解空间,通常有
    2n
    个叶节点
  2. 排列树: 当所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树。通产有n!个叶节点

6.总结


  • 回溯发产生的节点数m是解空间树节点总数的1.55%左右

2. 贪心算法


1. 概述


  • 该算法总是做出在当前来看最好的选择。
  • 具有贪心选择性质(整体最优解可通过局部最优的选择)和最优质结构性质(问题的最优解包含子问题的最优解)

2.

3.问题


  1. 活动安排问题
  2. 背包问题(选择物品i装入背包时,可选择物品i的一部分)(O(nlog(n))
  3. 最优装在问题
  4. 哈弗曼编码(O(nlog(n))) (前缀码:每个字符规定一个0,1串作为其代码,并要求任一字符的代码都不是其他字符代码的前缀)
  5. 单源最短路径
  6. 最小生成树(Prim算法(O(nlog(n))), Kruskal(O(eloge)),当e=N(n^2)时,Prim算法好,当e=o(n^2),Kruskal算法好)

3.概率算法


1. 概述

2. 算法


1. 数值概率算法

  • 常用于数值问题求解
  • 近似解,且近似解的精度随计算时间的增加而不断提高

2. 蒙特卡罗算法

  • 求问题的准确解
  • 能求得问题的一个解,未必是正确的
  • 所用时间越多,得到正确解的概率越高

3. 拉斯维加斯算法

  • 求正确的解
  • 有时找不到
  • 找到的概率随时间增加而增加

4. 舍伍德算法

  • 总能求得问题的一个正确的解
  • 不是避免算法的最坏情况行为,而是设法消除这种最坏情形行为与特定实例之间的关联性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值