• 背包问题


    背包问题的描述如下:
      已知有n种物品和一个可容纳m重量的背包,每种物品i的重量为wi。假定将物品i的一部分xi放人背包就会得到pixi的效益,0≤xi≤1,pi>0。采用怎样的装包方法才会使装入背包物品的总效益最大呢?显然,由于背包容量是m,因此,要求所有选中要装入背包的物品总重量不超过m。如果这n件物品的总重量不超过m,则把所有物品装入背包自然获得最大效益。如果这些物品重量的和大于m,则在这种情况下该如何装包呢?这是本节所要解决的问题。根据以上讨论,可将问题形式描述如下:
    极 大 化: Σpixi (4.1)
    1≤i≤n
    约束条件:Σ wixi ≤m (4.2)
    1≤i≤n
    0≤xi≤1,pi>0,wi>0,1≤i≤n (4.3)
    其中,(4.1)式是目标函数,(4.2)和(4.3)是约束条件。满足约束条件的任一集合(x1, …, xn)是一个可行解(即能装下);使目标函数取最大值的可行解是最优解。

    背包问题的贪心算法:

    void Greedy_Knapsack(float p[],float w[],float m[],float x[],int n) {
    //p(1:n)和w(1:n)分别含有按p(i)/w(i)≥p(i+1)/w(i+l)排序的 n件物品的
    //效益值和重量。m是背包的容量大小,而x(1:n)是解向量
    int i;float cu; //cu是背包的剩余容量
    for(i=1;i=n;++i) x[i] = 0//将解向量初始化为零
    cu = m; //将背包剩余容量cu设成m
    for(i=1;i=n;++i) {
    if(w[i]>cu) breakelse {x[i] = 1;cu = cu - w[i];}
    };//for
    if(i≤n) { x(i) = cu/w(i);
    return x[];
    }// Greedy_Knapsack

     有关背包问题还有好几种解法,这里的代码也没有加上去,值得继续深究。

  • 相关阅读:
    python------面向对象介绍
    python------模块定义、导入、优化 ------->re模块
    python------模块定义、导入、优化 ------->hashlib模块
    Java过滤器Filter使用详解
    EL表达式、 jstl标签
    jsp 自定义标签中的Function函数
    JSP 自定义标签
    javax.el.PropertyNotFoundException: Property 'name' not found on type java.lang.String
    JSP 中EL表达式用法详解
    JavaWEB
  • 原文地址:https://www.cnblogs.com/lihuidashen/p/3417286.html
Copyright © 2020-2023  润新知