• 01分数规划基本类型


    01分数规划
    01分数规划就是给出(n)个二元组((v_1,w_1),(v_2,w_2),cdots,(v_n,w_n)),选出具有(k)个元素的集合(S),使得(frac{sum_{iin S}v_i}{sum_{iin S}w_i})最大(或者最小)。
    求解的基本方法是二分答案。
    判断是否存在集合(S),使得(frac{sum_{iin S}v_i}{sum_{iin S}w_i}geq x)
    也就是(sum_{iin S}v_i-x*sum_{iin S}w_igeq 0)
    即为(sum_{iin S}(v_i-x*w_i)geq 0)
    因此,将所有元素按照((v_i-x*w_i))的值从大到小排序,贪心选取前(k)个,判断是否大于等于零,从而判断当前答案是否可行。
    每次判断的时间复杂度(O(nlog n)),总的时间复杂度(O(nlog nlog m))(m)表示二分的范围。
    最优比率生成树
    无向图中的每一条边(i)都有花费(c_i)和权值(s_i),从中选出边集(S)构成一棵生成树,使得(frac{sum_{iin S}c_i}{sum_{iin S}s_i})最小。
    和01分数规划类似,二分答案。
    (frac{sum_{iin S}c_i}{sum_{iin S}s_i}leq x)
    (sum_{iin S}(c_i-x*s_i)leq 0)
    每次将每一条边的边权设为((c_i-x*s_i)),通过(prime)算法求出最小生成树,判断最小生成树的总权值是否小于等于零,从而判断当前答案是否可行。
    最优比率环
    有向图中每个点有点权(w_i),每条边有边权(s_j),从中选出一个环,集合(S)中的元素为环中每个点权和对应入边边权组成的二元组,使得(frac{sum_{kin S}w_k}{sum_{kin S}s_k})最大。
    同样类似于01分数规划,二分答案。
    (frac{sum_{kin S}w_k}{sum_{kin S}s_k}geq x)
    (sum_{kin S}(w_k-x*s_k)geq 0)
    改成小于等于零的形式:
    (sum_{kin S}(x*s_k-w_k)leq 0)
    这样可以使用SPFA判断是否存在负环,从而判断当前答案是否可行。

  • 相关阅读:
    C++:变量声明和定义的关系
    Docker 方式搭建 zookeeper + kafka 集群
    Centos7.6系统下docker的安装
    CentOS7服务器下安装配置SSL
    《深入浅出密码学》|ing
    车联网入侵检测技术(持续更新)
    Hive的安装及交互方式
    Centos7中安装MySQL5.7记录
    Zookeeper-分布式锁代码实现
    【Java】String字符串的最大长度
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13361978.html
Copyright © 2020-2023  润新知