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的之后,就知道它目前没有有效的多项式时间算法解决它了。因此,转而求其次,即求解该问题的近似解。那么,就需要将该问题转化为优化问题,然后再使用算法分析技术进行求解。

  • 相关阅读:
    [Leetcode]480. Sliding Window Median
    C++的一些小的知识点
    extern关键字
    c++的默认构造函数 VS 深拷贝(值拷贝) 与 浅拷贝(位拷贝)
    inline-内联函数的优点以及与宏定义的区别
    char类型输出地址
    c++ 对象的内存布局
    Shell 去掉文本中的空格
    牛客网-网易编程题 双端队列找规律
    计算机网络概观
  • 原文地址:https://www.cnblogs.com/hapjin/p/4540554.html
Copyright © 2011-2022 走看看