zoukankan      html  css  js  c++  java
  • 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判断是否存在负环,从而判断当前答案是否可行。

  • 相关阅读:
    缓存IO读写的方式
    mapboxgl 纠偏百度地图
    GIS常用算法
    DevExpress VCL TdxBar工具栏上的按钮等居右对齐无效的问题
    dxRichEditControl、Invalid operation in GDI+ (Code: 2)
    Indy+POP/SMTP收发邮件
    VUE父组件给子组件传对象
    Linux下进程间通信
    Linux下守护进程
    Linux下进程控制相关
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13361978.html
Copyright © 2011-2022 走看看