精华内容
下载资源
问答
  • 针对用户数量受限应用环境,给出一种以一系列小BIBD(balanced incomplete block design)关联矩阵取补转置得到编码矩阵,替代单位标准正交阵中非零元素构成2层级联码,与混沌序列异或,并根据合谋假设计算并...
  • 测试用例方法总结

    2014-04-17 11:09:30
     是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。  2)无效等价类  与有效等价类的定义恰巧相反。无效等价类指对程序的规格...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5...
  • 标准的PID控制器结构出发,导出了一类基于被控过程辨识的PID参数自动整定算法,对由此构成的自校正PD控制系统的稳定性和其他性能进行了理论分析和仿真研究。结果表明,该算法对开环稳定的非最小相位过程具有良好的...
  • 提出了井下爆破作业后炮烟运移规律,并在此基础上选取真实炮掘巷道为试验对象,对自然通风情况下巷道内炮烟中CO浓度变化规律进行分析,建立了巷道内不同位置处CO浓度降低到标准浓度时间计算方法,提出了作业人员...
  • 贪心法一些理解

    2021-05-09 10:06:12
    解决问题一般方法是:我们会根据题意,选取一种度量标准,然后按照这种度量标准对n个输入排序,排好序后按照这种顺序,一次输入一个量。 如果这个输入和当前已构成在这种度量意义下部分最优解加在一起不能...

    关于贪心法的基本思想,最优度量标准:

      先来看看问题的一般特征:对于我们遇到的一个问题(比如01背包问题),问题的解是由n个输入的、满足某些事先给定的条件的子集组成。

      解决问题的一般方法是:我们会根据题意,选取一种度量标准,然后按照这种度量标准对n个输入排序,排好序后按照这种顺序,一次输入一个量。

      如果这个输入和当前已构成在这种度量意义下的部分最优解加在一起不能产生一个可行解(比如说背包问题中,加入当前这个输入后背包超重了),则不把此输入加到这部分解中。否则,将当前输入合并到部分解中从而得到包含当前输入的新的部分解。

      这种能够得到某种量度意义下的最优解的分级处理方法称为贪心方法。

     需要注意的是,得到的贪心解不一定是最优解,度量标准有很多,我们可能只是选择其中一种作为度量标准。

      因此,使用贪心法求解问题的关键就变成了选取能够得到问题最优解的那个度量标准。

    接下来让我们看看使用贪心法求解几个问题的思路和对应的时间复杂度,以此来加深对贪心法的理解。

    1.贪心法解决部分背包问题:

    问题描述:已知n种物品具有重量(W1,W2,...Wn)和效益值(P1,P2,......Pn),以及一个可容纳M重量的背包;设当物品i全部或部分xi放入背包将得到pixi的效益值。这里0=<xi<=1,pi>0。

      问题:采用怎样的方法才能使得装入背包的物品的总效益最大?

    上面说过贪心法的关键是找到能够使得问题得到最优解的度量标准。在这个问题里的度量标准是每次装入要使得累计效益值与所用容量的比值有最多的增加(首次装入)和最小的减小(越往后装这个比值肯定是越来越小的)。

    所以,我们按照物品的单位效益值:pi/wi(效益值比重量)比值的非增次序来放入背包。

    下面用伪代码来描述其思想,我觉得伪代码看起来也是比较晦涩的,但是稍微试着努力看一下,还是可以看明白的。

    procedure GREEDY——KNAPSACK(P,W,M,X,n)  //procedure(程序)  GREEDY(贪心法)  KNAPSACK(背包问题)   (P,W,M,X,n)为参数。

    real P(1:n),W(1:n),X(1:n),M,cu;     //P(1:n),W(1:n)是n件物品的效益值和重量这两个数组。M是背包的容量大小,而x(1:n)是解向量

    real P(1:n),W(1:n),X(1:n),M,cu;//real代表实数

    integer I,n

    X←0//将解向量初始化为空

    cu←M//cu是背包的剩余容量

    for i←1 to n do

    if  W(i)>cu then exit endif

    X(i)←1

    cu←cu-W(i)

    repeat//for和repeat之间的是循环操作要做的内容

    if   i<=n,thenX(i)←cu/W(i)   endif//这个是处理放到最后一整个物品放不下,选择该物品的一部分放

    end GREEDY -KNAPSACK

     

    2.带有限期的作业排序

    问题描述:假定在一台机器上处理n个作业,每个作业均可在单位时间内完成(也就是每个作业的完成时间都是1);同时每个作业i都有一个截至期限di>0,当且仅当作业i在其截止期限以前被完成时,则获得pi>0的效益。

      现在的问题是:求这n个作业的一个子集J,其中的所有作业都可在其截止期限内完成。从这里就可以看到J其实是问题的一个可行解。

      可行解J中的所有作业的效益和,具有最大效益值的可行解是该问题的最优解。

    目标函数:

    约束条件:可行解中的所有作业都应该在其期限之前完成。

    来到了最关键的部分:度量标准的选择。这里,我们以目标函数作为度量。

    度量标准:下一个要计入的作业将是使得在满足所生产的J是一个可行解的限制条件下让

    得到最大增加的作业。

    处理规则:按Pi的非增次序(也就是这些作业按效益值从大到小,大的优先考虑)处理这些作业。

    作业排序算法的概略描述

    procedure   GREEDY-JOB(D,J,n)//作业已经默认是按照p1>p2>p3的效益值从大到小的次序输入,D(i)是它们的期限值。J是在它们的截止期限完成的作业的集合。

    J←{1}

    fori←2 to n do

      if  J∪{i}的所有作业能在它们的截止期限前完成

       then J←J∪{i}//作业i加入进J

           endif

       repeat

    end  GREEDY-JOB

    带有限期和效益的单位时间的作业排序贪心算法详细描述

    procedure  JS(D,J,n,k)

    //D(i)是期限值.J(i)是最优解中的第i个作业,终止时,D(J(i)<=D(J(i+1))。

    integer D(0:n),J(0:n),i,k,n,r

    D(0)←J(0)←0//初始化

    k←1;J(1)←1//计入作业1

      for  i←2  to   n   do  //按p的非增次序考虑作业。找i的位置并检查插入的可行性

       r←k//这里为什么要把k赋给r呢,是因为用r来记录当前已经加入进解向量中的数量有多少,然后下一步还得让r从后往前跟当前选择的作业的截止期限进行比较。

             while D(J(r))>D(i)  and  D(J(r))不等于r  do    //r可以后移,找到最前插入位置

             r←r-1

             repeat//while循环运行到这里

            if  D(J(r))=<D(i)  and   D(i)>r  then //把i插到J中

                for  i←k  to r+1  by  -1  do//倒着来,k是解向量中的最后一个,从后往前一直到作业i要插入的位置,把这些作业依此向后移动一位

                       J(i+1)←J(i)//将插入点的作业后移一位

                   repeat

                        J(r+1)←I;k←k+1//插入当前元素,同时解向量的个数增加一个

          end if

      repeat//对应第一个for循环

    end JS

    计算时间分析

    for  i←2  to n do         //这个将循环n-1次

       r←k

       while  D(J(r))>D(i)  and D(J(r))不等于r  //至多循环k次,k时当前计入J中的作业数

          r←r-1

      repeat

       If   D(J(r))=<D(i)  and D(i)  >r  then 

           for i←k  to r+1  by  -1  do  循环k-r次,r是插入点的位置。

            J(i+1)←J(i)

            repeat

            J(r+1)←I;k←k+1

        endif

    repeat

     

    在这里设S是最终计入J中的作业数,则算法JS所需总时间是O(sn)。s=<n,故

    最坏情况:Tjs=O(n^2),特例情况:pi=di=n-i+1,1=<i=<n(我的理解是效益值大的截止时间在后面)

    最好情况   Tjs=O(n),特例情况:pi=di=i,1=<i=<n(效益值大的截止时间小)

     

    使用UNION和FIND算法的作业排序问题

     

    贪心法解决最小生成树问题

    首先还是问题描述:

    生成树:设G=(V,E)是一个无向连通图。如果G的生成子图T=(V,E')是一棵树,则称T是G的一棵生成树(spanning tree)。

    贪心策略:选择能使迄今为止所计入的边的成本和最小增加的那条边。

    有两种算法,prim和kruskal算法。

    先来看prim:

      策略:使得每次选择一条边加入集合A(集合A用来存放每次选择的边)后能构成一棵树,对将要加入到A中的下一条边(u,v),应该是不在A中且使得A∪{(u,v)}也是一棵树的最小成本边。简单来说,就是每次找成本最小的边,如果这条边加入后不能构成树,就找下一条相对小的边。

    算法伪代码描述:

      procedure   PRIM(E,COST,n,T,mincost)//E是G的边,COST(n,n)是n结点图G的成本邻接矩阵,矩阵元素COST(i,j)是一个正实数。如果不存在边(i,j),则为+∞。计算一颗最小生成树并把它作为一个集合存放到数组T(1:n-1,2)中(T(i,1),T(i,2))是最小生成树的一条边。最小生成树的总成本最后赋给mincost。

    NEAR(j)是树中使得COST(j,NEAR(j))是对NEAR(j)所有选择中的最小值

    real   COST(n,n),mincost

    integer  NEAR(n),n,i,j,k,I,T(1:n-1,2)

    (k,I)←具有最小成本的边

    mincost←COST(k,I)

    (T(I,1),T(I,2))←(k,I)

    for  i←1  to   n  do//将NEAR置初值

       if  COST(i,I)<COST(i,k)  then  NEAR(i)←I

                else    NEAR(i)←k

        endif

     repeat//对应于for  i←1  to   n  do(结束将NEAR置初值)

       NEAR(k)←NEAR(I)←0

    for  i←  2  to   n-1   do//找T的其余n-2条边

               设j是NEAR(j)不等于0且COST(j,NEARR(j))最小的下标

                  (T(i,1),T(i,2))←(j,NEAR(j))

     

    prim的伪代码还需整理。。。

     

    Kruskal算法

         (连通)图的边按成本的非降次序排列,下一条计入生成树T中的边是还没有计入的边中的具有最小成本、且和T中现有的边不会构成环路的边。简单说就是从小往大挑不会构成环路的边。

    单源最短路径

    1.问题描述:

           已知一个n结点的有向图G=(V,E)和边的权函数c(e),求由G中某指定结点V0到其他各个结点的最短路径。假定边的权值为正。

     2.贪心策略求解:

    1.度量标准

    量度的选择:迄今已经生成的所有路径长度之和———为使之达到最小,其中任意一条路径都应该具有最小长度:

      假定已经构造了i条最短路径,则下一条要构造的路径应是下一条最短的路径。

     处理规则:按照路径长度的非降次序依此生成从结点v0到其他各个结点的最短路径。

    也就是说单源最短路径问题是求一个结点到其余所有结点的最短路径。比如一个图中有5个结点,那么就会求出一个点分别到其他4个点的总共4条最短路径。

    2.贪心算法

    ※设S是已经对其生成了最短路径的结点集合(包括出发点v0)。

    ※对于当前不在S中的结点w,记DIST(w)是从v0开始,只经过s中的结点而在w结束的那条最短路径的长度。(DIST数组里面存距离)

    1.如果下一条最短路径是到结点u,则这条路径是从结点v0出发在u处终止,且只经过那些在S中的结点,,也就是说从v0到u的这条最短路径上的所有中间结点都是S中的结点。

      设w是这条路径上的任意中间结点,则从v0到u的路径页包含了一条从v0到w的路径,且其长度小于从v0到u的路径长度。

       根据生成规则:最短路径是按照路径长度的非降次序(为什么会非降呢?因为每个被确定的最短路径结点都是从之前结点的基础上延伸)生成的,因此从v0到w的最短路径应该已经生成。从而w也应该在S中。所以不存在不在S中的中间节点。

    2.所生成的下一条路径的终点u必定是所有不在S内的结点且具有最小距离DIST(u)的结点。

    3.如果选出了这样的结点u并生成了从v0到u的最短路径,结点u将成为S中的一个成员。此时,那些从v0出发,只经过S中的结点并且在S外的结点w处结束的最短路径可能会减少——DIST(w)的值变小。

    如果这样的路径的长度发生了改变,则这些路径必定是一条从v0开始,经过u然后到w的更短的路所致。

    ※根据DIST(w属于的定义,它所表示的v0到w的最短路径上的所有中间节点都在S中;

    ※只考虑<u,w>属于E和<u,w>不属于E的情况。

    ※u是从v0到w的最短路径上所经过的结点。则有:DIST(w)=DIST(u)+c(u,w)

    伪代码有点繁琐,先写到这里

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

      

     

    展开全文
  • 3.多阶段决策问题,就是要在可以选择那些策略中间,选取一个最优策略,使在预定的标准下达到最好效果。 4.最优性原理 (1)不论初始状态和第一步决策是什么,余下决策相对于前一次决策所产生新状态,构成...

    1.动态规划是解决多阶段决策问题的一种方法。

    2.多阶段决策问题:如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。

    3.多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果。

    4.最优性原理
    (1)不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。

    (2)最优决策序列的子序列,一定是局部最优决策子序列。

    (3)包含有非局部最优的决策子序列,一定不是最优决策序列。

    5.动态规划的指导思想
    (1)在做每一步决策时,列出各种可能的局部解.

    (2)依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。

    (3)以每一步都是最优的来保证全局是最优的。

    6.动态规划的几个概念

    阶段:据空间顺序或时间顺序对问题的求解划分阶段。
    状态:描述事物的性质,不同事物有不同的性质,因而用不同的状态来刻画。对问题的求解状态的描述是分阶段的。
    决策:根据题意要求,对每个阶段所做出的某种选择性操作。
    状态转移方程:用数学公式描述与阶段相关的状态间的演变规律。
    7.大多数问题动态规划都可以解决,但是太慢。因此有些问题贪心确实比动态快的多。不过相对的贪心解决问题并不如动态规划精细,得出来的不一定是最优解,只能说是相对最优,根据情况选择不同的算法解决问题才是王道。

    展开全文
  • 为了提高测速精度,在信号后级添加比较器调理信号为标准的方波,调节比较器运放偏置电压使方波信号最适合于测速。 同样适用外界电机(已配有自制编码盘),给电机加电让其带动编码盘旋转,将光电对管靠近编码盘...
  • 背包算法问题.doc

    2020-09-16 02:52:51
    熟练使用贪心算法之背包问题解决相应问题 实验思想 贪心方法是一种改进了分级处理方法它首先根据题意选取一种量度标准然后按这种量度标准对这n个输入排序并按排序一次输入一个量如果这个输入和当前已构成在这种...
  • 为提高采用标准支持向量机(SVM)学习能力与推广能力,建立了若干选取规则,构造出一种有效混合核函数。最后采用混合SVM结合信息熵的方法检测ICMP隐通道,取得了较快分类速度和较高检测率。实验结果表明,采用...
  • 本文选取真实炮掘巷道为研究对象,采用试验研究方法对自然通风情况下,巷道内CO浓度变化规律进行分析,研究结果定量给出了巷道内不同位置处CO达到标准浓度时间,为施工人员再次进入到工作面作业提供可靠时间...
  • W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力国际中立性技术标准机构。主要工作是发展 Web 规范,这些规范描述了 Web 通信协议(比如 HTML 和 XHTML)和其他构建模块。 NativeApp 使用...
  • 定时方法测量是待测信号周期,这种方法只设 一种量程,测量结果通过浮点数运算模块将信号周期转换成对应频率值,再将 结果送去显示。这样无论采用何种方式,只要完成一次测量即可,频率计自动开 始下一个测量...
  • 并举例(略)2、单项测评结果判定方法(也就是什么时候判定符合、不符合、部分符合,答案在中级教程里)3、云测评时,在三种模式下,云平台和云租户需要选取的测评对象分别是哪些4、测评报告内容构成(略) ...


    说明:题目来自网上及部分答案来自标准,答案非标准仅供参考,欢迎留言讨论~!

    1、简述等级测评中整体测评结果分析的方法,并举例(略)

    2、单项测评结果的判定方法(也就是什么时候判定符合、不符合、部分符合,答案在中级教程里)

    单项测评结果的形成通常分为三步:
    1)针对每个测评项,分析该测评项所对抗的威胁在被测定级对象中是否存在,如果不存在,则该测评项应标为不适用项。对于适用项,则
    2)分析单个测评项是否有多方面的要求内容,针对每一方面的要求内容,将一个或多个测评证据与要求内容的预期测评结果相比较;
    3)如果测评证据表明所有要求内容与预期测评结果一致,则判定该测评项的单项测评结果为满分;
    4)如果测评证据表明所有要求内容与预期测评结果不完全一致,则应根据测评项的具体内容和测评证据情况具体问题具体分析,举例说明如下:
    ——测评项包含一方面要求内容,且是针对一个测评对象的,则单项测评结果应判定为0分。
    例如测评项“a)机房场地应选择在具有防震、防风和防雨等能力的建筑内”,根据《测评要求》,应有四方面测评证据:“1)具有建筑物抗震设防审批文档;2)机房不存在雨水渗漏;3)门窗不存在因风导致的尘土严重;4)屋顶、墙体、门窗和地面等不存在破损开裂。”,由于这四项证据针对的都是机房一个测评对象,因此全部具备才能证明机房具备相应能力,该测评项才能符合要求,若仅具有其中的一项或某几项证据,则无法证明机房具备该测评项所要求的能力,因此,若测评证据表明所有要求内容与预期测评结果不完全一致,则应判定为0分。
    ——测评项包含一方面要求内容,且测评项内容是针对多个测评对象的,则单项测评结果可判定为0.5分。
    例如测评项“a)应保证网络设备的业务处理能力满足业务高峰期需要;”,根据《测评要求》,应有三方面测评证据:“1)业务高峰时期一段时间内主要网络设备的CPU使用率和内存使用率满足需要;2)网络设备从未出现过因设备性能问题导致的宕机情况;3)验证设备满足业务高峰期需求。”,由于这三方面测评证据针对的是等级保护对象的所有网络设备对象,若有部分网络设备对象方面测评证据要求,则可以将该项判定为部分符合,即0.5分。
    ——测评项包含多方面要求内容,但要求内容之间具有密切关联关系,且是针对一个测评对象的,则单项测评结果应判定为0分。
    例如测评项“d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。”,根据《测评要求》,应有两方面测评证据:“1)采用动态口令、数字证书、生物技术和设备指纹等两种或两种以上组合的鉴别技术对用户身份进行鉴别;2)其中一种鉴别技术使用密码技术来实现。”,由于这两项证据全部满足才能证明该测评对象具备了双因素鉴别能力。,该测评项才能符合要求,因此,若测评证据表明所有要求内容与预期测评结果不完全一致,则应判定为0分。
    ——测评项包含多方面要求内容,且要求内容之间相对独立。应针对每一方面要求内容进行判定,若存在有的方面要求内容符合要求,有的不符合要求,则单项测评结果可判定为0.5分。
    别如测评项“a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。”这个要求项就包含“对登录的用户进行身份标识和鉴别”、“身份标识具有唯一性”、“身份鉴别信息具有复杂度要”和“身份鉴别信息定期更换”等四个方面的要求内容。这四方面内容相对独立,则应根据测评证据对每一方面内容单独判定为符合或不符合。若四方面要求内容判定结果不全为符合,则单项测评结果可判定为0.5分。
    5)如果测评证据表明所有要求内容与预期测评结果均不一致,则判定该测评项的单项测评结果为0分。

    3、云测评时,在三种模式下,云平台和云租户需要选取的测评对象分别是哪些

    责任划分 SaaS PaaS IaaS Local
    数据
    客户端及终端节点
    身份和访问管理
    应用控制
    主机与网络安全
    机房物理安全
    把系统或服务看做一盘菜比喻 下馆子,只用吃 买净菜,直接炒 菜场买菜,洗切完了才能炒 自己从种菜开始全部自己弄

    租户责任: ⃞
    共同责任:◪
    云服务商责任:◼

    从上表可以看出来SaaS→PaaS→laaS,云服务商提供的服务逐渐递减,相应的责任也递减

    根据GB/T 22239-2019中附录D 云计算应用场景说明描述:
    软件即服务(SaaS)、平台即服务(PaaS)、基础设施即服务(laaS)是三种基本的云计算服务模式。如图D.1所示,在不同的服务模式中,云服务商和云服务客户对计算资源拥有不同的控制范围,控制范围则决定了安全责任的边界。
    在基础设施即服务模式下,云计算平台/系统由设施、硬件、资源抽象控制层组成;
    在平台即服务模式下,云计算平台/系统包括设施、硬件、资源抽象控制层、虚拟化计算资源和软件平台;
    在软件即服务模式下,云计算平台/系统包括设施、硬件、资源抽象控制层、虚拟化计算资源、软件平台和应用软件。
    不同服务模式下云服务商和云服务客户的安全管理责任有所不同。
    具体可以看:https://cloud.tencent.com/developer/article/1170001

    4、测评报告的内容构成(略)

    展开全文
  • 贪心法-背包问题

    2013-10-30 00:30:20
    如果这个输入和当前已构成在这种量度意义下部分最优解加在一起不能产生一个可行解,则不把此输入加到这部分解中。否则,将当前输入合并到部分解中从而得到包含当前输入部分解。 这一处理过程

    贪心方法的一般策略
    –问题的一般特征:问题的解是由n个输入的、满足某些事先给定的条件的子集组成。
    –一般方法
    根据题意,选取一种度量标准。然后按照这种度量标准对n个输入排序,并按序一次输入一个量。
    如果这个输入和当前已构成在这种量度意义下的部分最优解加在一起不能产生一个可行解,则不把此输入加到这部分解中。否则,将当前输入合并到部分解中从而得到包含当前输入的新的部分解。
    这一处理过程一直持续到n个输入都被考虑完毕,则记入最优解集合中的输入子集构成这种量度意义下的问题的最优解。

    这种能够得到某种量度意义下的最优解的分级处理方法称为贪心方法

    贪心方法的抽象化控制描述
    procedure GREEDY(A,n)
    //A(1:n)包含n个输入//
    solution←Φ //将解向量solution初始化为空//
    for i←1 to n do
    x←SELECT(A) //按照度量标准,从A中选择一个输入,其值赋予x
    并将之从A中删除//
    if FEASIBLE(solution, x) then //判定x是否可以包含在解向量中,
    即是否能共同构成可行解//
    solution←UNION(solution, x) //将x和当前的解向量合并成新的解
    向量,并修改目标函数//
    endif
    repeat
    return(solution)
    end GREEDY

    背包问题的描述
    –已知n种物品具有重量(w1, w2,…, wn)和效益值(p1, p2,…, pn) ,及一个可容纳M重量的背包;设当物品i全部或一部分xi放入背包将得到pi xi的效益,这里,0≤ xi ≤1, pi >0。
    –问题:采用怎样的装包方法才能使装入背包的物品的总效益最大?

    分析:
    ①装入背包的总重量不能超过M
    ②如果所有物品的总重量不超过M,即≤M,则把所有的物品都装入背包中将获得最大可能的效益值
    ③如果物品的总重量超过了M,则将有物品不能(全部)装入背包中。由于0≤xi≤1,所以可以把物品的一部分装入背包,所以最终背包中可刚好装入重量为M的若干物品(整个或一部分)

     

    问题的形式描述
    可 行 解:满足上述约束条件的任一集合(x1,x2,…,xn) 都是问题的一个可行解——可行解可能为多个。 (x1,x2,…,xn)称为问题的一个解向量。
    最 优 解:能够使目标函数取最大值的可行解是问题的最优解——最优解也可能为多个

    最优的度量标准
    在这种策略下的量度是: 已装入的物品的累计效益值与所用容量之比。
    故,新的量度标准是: 每次装入要使累计效益值与所用容量的比值有最多的增加(首次装入)和最小的减小(其后的装入)。
    此时,将按照物品的单位效益值:pi/wi 比值(密度)的非增次序考虑。

    实例分析
    (p1,p2,p3) = (25,24,15), (w1,w2,w3) = (18,15,10)
    ∵ p1/w1<p3/w3 <p2/w2
    ∴ 首先将物品2放入背包,此时x2=1,背包容量减少w2=15个单位,还剩余空间ΔM=5。同时,背包获得p2=24的效益增量。
    其次考虑物品1和3。此时,应选择物品3,且就ΔM=5而言有,也只能放入物品3的一部分到背包中 。即
    x3=5/10=1/2

    (p1,p2,p3) = (25,24,15), (w1,w2,w3) = (18,15,10)
    最后,背包装满ΔM=0,故物品1将不能装入背包,x1=0 。
    背包最终可以获得效益值= x1 p1 +x2 p2+x3 p3
    = 31.5 (最优解)

    背包问题的贪心算法
    procedure GREEDY-KNAPSACK(P,W,M,X,n)
    //p(1:n)和w(1:n)分别含有按P(i)/W(i)≥P(i+1)/W(i+1)排序的n件物品的效益值和重量。M是背包的容量大小,而x(1:n)是解向量//
    real P(1:n), W(1:n), X(1:n), M, cu;
    integer i, n
    X←0 //将解向量初始化为空//
    cu←M //cu是背包的剩余容量//
    for i←1 to n do
    if W(i) > cu then exit endif
    X(i) ←1
    cu ←cu-W(i)
    repeat
    if i≤n then X(i) ←cu/W(i) endif
    end GREEDY-KNAPSACK

     

    测试过的代码

    #include <iostream>
    
    using namespace std;
    void greedy_knapsack(int p[],int w[],float x[],int n,float m)
    {
        float cu = m;
        int i;
        for (i=0;i<n;++i)
        {
            if(w[i]>cu)
                break;
            x[i]=1;
            cu -= w[i];
        }
        if(i<=n-1)
            x[i] = cu/w[i];
    }
    
    int main()
    {
        //重量
        int p[3] = {24,15,25};
        //效益值
        int w[3] = {15,10,18};
        //解向量
        float x[3] = {0};
        //重量限制是30
        int m = 20;
        greedy_knapsack(p,w,x,3,m);
        for(int i=0;i<3;++i)
            cout <<x[i]<<'\t'<< endl;
        return 0;
    }
    


     

    展开全文
  • 若当前输入和以前在这种度量标准部分解合并在一起能够构成可行解,则将其与部分解合并,否则则去掉这个输入。重复上述过程直到 枚举结束。这种通过某种度量标准获取最优解分级处理方法成为贪心算法。 SPARKS...
  • 动态规划

    2019-03-20 22:16:25
    多阶段决策问题,就是要在可以选择那些策略中间,选取一个最优策略,使在预定的标准下达到最好效果. 不论初始状态和第一步决策是什么,余下决策相对于前一次决策所产生新状态,构成一个最优决策序列。 最优...
  • acm-dp-1

    2019-03-27 23:17:48
    多阶段决策问题,就是要在可以选择那些策略中间,选取一个最优策略,使在预定的标准下达到最好效果. 最优性原理: 1.不论初始状态和第一步决策是什么,余下决策相对于前一次决策所产生新状态,构成一个...
  • 又见动态规划

    2018-02-05 22:44:21
    问题解决就是要在可以选择那些策略中间,选取一个最优策略,使在预定的标准下达到最好效果。 2.最优性原理: a.不论初始状态和第一步决策是什么,余下决策相对于前一次决策所产生新状态,构成一个最优...
  • 动态规划(一)

    2018-02-02 21:57:45
    问题解决就是要在可以选择那些策略中间,选取一个最优策略,使在预定的标准下达到最好效果。 2.最优性原理: a.不论初始状态和第一步决策是什么,余下决策相对于前一次决策所产生新状态,构成一个最优...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

标准构成的选取方法