博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划-带权区间问题
阅读量:4363 次
发布时间:2019-06-07

本文共 1057 字,大约阅读时间需要 3 分钟。

一、动态规划算法的定义:

  为了着手开发一个动态规划算法,我们需要一组从初始问题导出的满足某些基本性质的子问题。

  1. 只存在多项式个子问题
  2. 可以容易的从子问题的解计算出初始问题的解
  3. 在子问题中,从“最小”到“最大”存在一种自然的顺序,与一个容易计算的递推公式相联系。这个递推公式允许我们从某些更小的子问题的解来确定一个子问题的解。

二、带权区间调度问题:

  我们有N个需求,标记为1,2,3,......,N,每个需求指定一个开始时间si,结束时间fi ,每个需求i有一个权值vi,如果两个需求不重叠,那么他们是相容的。

  目标:选择一个两两相容的子集,使得最大。

三、动态规划算法:

  首先让所有的需求按照结束时间非降序排序:f1<=f2.....<fn

  定义p(j) 为使得区间i与j不相交的最大的标记,既i是最右边的在j开始之前的区间。

  设最优解为O,则显然对每个区间都有:

  令区间{1,2,3,......,j}的最优解为OPT(j)

  则:

    OPT(j) = MAX( vj + OPT(p(j)), OPT(j-1))

  并且需求j属于OPT(j),当且仅当:

    OPT(p(j)) + vj >= OPT(j-1)

 

动态规划算法如下:

  1. 求出所有的OPT(j)

    其中数组M用于存储OPT(j)

    M-Comupte-OPT(j)

     If j == 0 then

      Return 0

     Else if M[j] 不为空 then

      Return M[j]

     Else

      M[j] = MAX( vj + Comupte-OPT(p(j)), Comupte-OPT(j-1))

      Return M[j]

     End

    

  2. 根据上一步求出的OPT[j],求出最优解中包含的区间

   Find-Solution(j)

    If j == 0 then

      Return “”;

    Else

      If  OPT(p(j)) + vj >= OPT(j-1) then

        Return j + Find-Solution(p(j))

      Else

        Return Find-Solution(p(j))

        End

     End

 

转载于:https://www.cnblogs.com/ordili/p/8497045.html

你可能感兴趣的文章
HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
查看>>
JAVA UDP网络编程学习笔记
查看>>
反素数 -- 数学
查看>>
CODEVS 1205 单词反转
查看>>
洛谷 P3367 【模板】并查集
查看>>
求质数算法的N种境界 (N > 10) zz
查看>>
XmlPullParserException
查看>>
机器学习降维算法一:PCA(主成分分析算法)
查看>>
第五周总结
查看>>
Beam概念学习系列之Pipeline Runners
查看>>
Elasticsearch之需要注意的问题(es和jdk版本)
查看>>
HBASE启动失败,Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster
查看>>
【Python 19】BMR计算器3.0(字符串分割与格式化输出)
查看>>
函数和模块的使用
查看>>
sqlx使用说明
查看>>
[转载]SQL Plus 一些使用技巧
查看>>
Dashboard集群
查看>>
TMS320F28335——IO控制/定时计操作
查看>>
MyBatis操作指南-与Spring集成(基于注解)
查看>>
23种设计模式的优点与缺点概况
查看>>