zoukankan      html  css  js  c++  java
  • 算法作业10——0-1装载问题(背包问题)

    1. 

    2. 解析

    价值密度pi/wi 贪婪算法,这种选择准则为:从剩余物品中选择可装入包的pi/wi值最大的物品。

    思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。

    定理:对于任何正整数 k 算法 (轻者先装)对 k 个集装箱的实例得到

    最优解。

    证明(数学归纳法)

    1k=1,集装箱个数为1且重量小于c,任何装法都只有一种方式,因此都是最优解,因此轻者先装也是最优解。

    2归纳假设:假设算法对于规模为 k 的输入都能得到最优解。

    则对于k+1的输入,

    通过拿掉最轻的集装箱能够得到规模为k的输入

    根据归纳假设,对于 k 个输入,N’W’C’的最优解为 I’,即 I’N’的最优解(归纳假设得)

    ,那么I必然是N的最优解,这也是算法对于 N,W,C 的解。

    证明:I 必然是 N 的最优解,采用反证法,即假设I不是 N的最优解。

    1)构建最优解 I*N):假设 I 不是 N 的最优解。则必然存在最优解 I*,如果I中没有1,用 1 替代 I中的第一个集装箱标号得到的解也是最优解(个数不变,因此也是最优解),使得 IN 的最优解,

    |I|>|I|

    2) 构建最优解 I*’N’):因为 IN的最优解,构建的I’=I*-{1}N不包含 1 的最优解(待证明),即关于 N’W’C’的最优解。

    证明:I*’=I*-{1}N不包含 1 的最优解。

    证(反证法):如果 I*’=I*-{1}不是不包含 1 的最优解,那么存在最优解 I*’’ N’,不含 1,使得|I*’|<|I*’’|

    |I*’+{1}|<|I*’’ +{1}|,与 I*’+{1}= I为最优矛盾,因此 I’=I*-{1}是不包含 1 的最优解。

    3)构建的最优解 I*’与归纳假设的最优解 I’比较:由(1|I*|>|I|得,| I*’|= ,与 I’的最优性矛盾(最优解 I*- {1}大于最优解 I’)

    3. 设计

    pw[i]=p[i]/w[i]降序

    For i to n //n是物品数量

    装入,-w[i],+v[i],x[i]=1

    4. 分析

    T(n)=O(nlogn)

    5. 源码

    https://github.com/2579081436/algorithm.github.io

  • 相关阅读:
    golang 引用相对路径package
    LiteIDE 在 Windows 下为 Go 语言添加智能提示代码补全
    C#代码实现把网页文件保存为mht文件
    AE开发中关于 “无法嵌入互操作类型.........请改用适用的接口”问题的解决方法
    Windows下visual studio code搭建golang开发环境
    Eclipse配置开发Go的插件——Goclipse
    go语言条件语句 if else
    Go语言基础:method
    GO语言基础之method
    go中的接口
  • 原文地址:https://www.cnblogs.com/-happy-/p/14800350.html
Copyright © 2011-2022 走看看