zoukankan      html  css  js  c++  java
  • 从子集和问题的动态规划解看判断问题与优化问题的区别与联系

    一,子集和问题的动态解

    1)子集和问题:给定一组整数构成的一个集合S,并给定另一个整数W,问:在S中是否存在一个子集A 包含于(属于) S,有A中所有元素的和等于W?

    (∑a(i)εAa(i) = W ?)

    2) 很明显,子集和问题是NPC问题,证明参考《算法导论第二版中文版》第627页。既然它是NPC的,而我们这里用动态规划来求解该问题,显然是找到该问题的一个近似解。

    3)根据1)中子集和问题的描述,该描述是判断问题,即判断集合A中所有的元素之和是不是等于W。当需要用动态规划来求解时,需要将之转化为优化问题。

    转化成的优化问题如下:

    在集合S中寻找一个子集A,在保证A中所有的元素之和小于等于W的前提下,最大化A中所有的元素之和。

    这样,得到的子集合问题的动态规划解与K步背包问题的动态规划解非常相似了。这方面的具体解法可以使用GOOGLE搜索Dynamic programming solove subset sum problem.

    二,判断问题与优化问题的应用场合(区别联系)

    优化问题和判断问题(决策问题)是相伴而行的。有一个优化问题就会对应有一个判断问题,反之亦然。

    判断问题出现于讨论该问题是否具有NPC性质时,如:顶点覆盖问题是NP完全的,即判断:图G=(V,E)中是否存在一个大小为K的点覆盖。

    优化问题出现于在我们用算法设计与分析技术(动态规划、贪心、分治……)来解决某问题时,该问题是一个优化问题。也即,动态规划、贪心、分治针对的是优化问题而不是判断问题。

    因此,当证明了某个问题是NPC的之后,就知道它目前没有有效的多项式时间算法解决它了。因此,转而求其次,即求解该问题的近似解。那么,就需要将该问题转化为优化问题,然后再使用算法分析技术进行求解。

  • 相关阅读:
    [Luogu P3626] [APIO2009] 会议中心
    杭电 1869 六度分离 (求每两个节点间的距离)
    杭电 1874 畅通工程续 (求某节点到某节点的最短路径)
    最短路径模板
    杭电 2544 最短路径
    POJ 1287 Networking (最小生成树模板题)
    NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
    POJ 2485 Highways (求最小生成树中最大的边)
    杭电 1233 还是畅通工程 (最小生成树)
    杭电 1863 畅通工程 (最小生成树)
  • 原文地址:https://www.cnblogs.com/hapjin/p/4540554.html
Copyright © 2011-2022 走看看