【近似算法】—0-1背包问题的近似算法

news2024/11/6 7:18:57

【近似算法】—0-1背包问题的近似算法

  • Approximation Schemes(近似方案)
    • PTAS(Polynomial time approximation scheme)
      • 定义:
  • FPTAS(Fully polynomial time approximation scheme)
      • 定义:
    • PPTAS(Pseudo-polynomial time approximation scheme)
      • 定义:
  • 伪多项式时间 0-1背包问题
    • 问题描述
    • 近似算法解法
    • 证明

Approximation Schemes(近似方案)

PTAS(Polynomial time approximation scheme)

定义:

若对于每一个固定的 ϵ > 0 ϵ > 0 ϵ>0 ,算法 A 的运行时间以实例 I I I的规模的多项式为上界,则称 A 是一个多项时间近似方案。

FPTAS(Fully polynomial time approximation scheme)

定义:

在 PTAS 的基础上,进一步要求算法 A 的运行时间以实例 I I I的规模和 1 / ϵ 1 / ϵ 1/ϵ 的多项式为上界,则称 A 是一个完全多项时间近似方案。FPTAS 被认为是最值得研究的近似算法,仅有极少数的 NP-hard 问题存在 FPTAS。

PPTAS(Pseudo-polynomial time approximation scheme)

定义:

如果算法的时间复杂度可以表示为输入数值规模 N 的多项式,但是运行时间与输入值规模 N 的二进制位数呈指数增长关系,则称其时间复杂度为伪多项式时间。一个具有伪多项式时间复杂度的NP完全问题称之为弱NP完全问题,而在 P!=NP 的情况下,若一个NP完全问题被证明没有伪多项式时间复杂度的解,则称之为强NP完全问题。

伪多项式时间 0-1背包问题

在这里插入图片描述

  • 如果数值算法的运行时间是输入数值的多项式,但不一定是输入长度的多项式(表示它所需的位数),则该算法在伪多项式时间内运行
  • 0-1背包问题的动态规划算法的运行时间为 O ( W ∗ n ) O(W*n) O(Wn) W W W需要 log ⁡ W \log W logW位来描述,因此它是伪多项式。
  • 其他伪多项式算法:原始性测试

问题描述

  • 设P为最大利润,即 P = m a x a ∈ S P ( a ) P=max_{a∈S}P(a) P=maxaSP(a)。由此,对于 n n n个对象,我们最多获取 n P nP nP的利润上限。在这里,我们可以假设每一项的好处都是内在价值。
  • 对于每个 i ∈ { 1 , … , n } i∈\{1,…,n\} i{1n} p ∈ { 1 , … … , n P } p∈\{1,……,nP\} p{1……nP},设 S i , p S_{i,p} Si,p表示总利润恰好为 p p p { a 1 , … , a i } \{a_1,…,a_i\} {a1ai}的子集,并且占用尽可能少的空间
  • A ( i , p ) A(i,p) A(ip)是集合 S i , p S_{i,p} Si,p的大小,其值为 ∞ ∞ ,表示没有这样的子集。
  • 对于 A ( i , p ) A(i,p) A(ip),我们有基本情况 A ( 1 , p ) A(1,p) A(1p)其中 A ( 1 , p ( a 1 ) ) A(1,p(a_1)) A(1,p(a1)) s ( a 1 ) s(a1) s(a1),所有其他值都是 ∞ ∞

近似算法解法

递归式:
在这里插入图片描述

  • 然后,最优子集对应于集合 S n , p S_{n,p} Sn,p,其中 p p p最大且 A ( n , p ) ≤ B A(n,p)≤B A(n,p)B。由于这最多迭代 n n n个不同的值来计算每个 A ( i , p ) A(i,p) A(i,p),我们得到了 O ( n 2 P ) O(n ^2P) O(n2P)的总运行时间,因此得到了背包的伪多项式算法
  • 很容易修改上述DP算法以实现0-1背包的全多项式时间逼近方案(FPTAS)
  • D P   F O R   K N A P S A C K ( ) DP\ FOR\ KNAPSACK() DP FOR KNAPSACK()
    1:Let P be the maximum benefit of all items
    2:Given ε > 0 ε>0 ε>0,let K = ε ⋅ P / n K=ε·P/n K=εP/n
    3:for each object a i a_i ai do
    4:define a new profit p ′ ( a i ) = ⌊ p ( a i ) K ⌋ p'(a_i)=⌊\cfrac{p(a_i)}{K}⌋ p(ai)=Kp(ai)
    5:将这些 p ′ ( a i ) p'(a_i) p(ai)作为n个项目的利润,使用动态规划算法,找到最大利润的集合 S ′ S' S
    6:输出 S ′ S' S作为原始背包问题的最终解
  • 定理:由上述算法输出的集合S′满足:
    • P ( S ′ ) ≥ ( 1 − ε ) ⋅ O P T P(S')≥(1-ε)·OPT P(S)(1ε)OPT。这里 P ( S ′ ) P(S') P(S)表示集合 S ′ S' S的利润(或收益),OPT是原始问题的最佳收益

证明

在这里插入图片描述

在这里插入图片描述

0-1背包问题近似算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器F12功能详细介绍

哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 掌握浏览器调试基本属于开发者必备的技能,熟悉…

Unity 2021 LTS中着色器构建时间和内存使用的改进

随着Unity的可脚本渲染管道(SRP)的可用特性集的不断增长,在构建时处理和编译的着色器变量的数量也在不断增加。除了对更多图形api的持续支持和不断增长的目标平台选择外,SRP的改进还在继续扩展。着色器在初始(“干净”)构建后被编译和缓存,从…

自动曝光在移动平台上的实现方案——以《使命召唤手游》为例

一. Intro在PBR渲染中,除了已被大家深入分析了很多遍的PBR材质属性(Surface Appearance)外,合理的光源强度和后处理也是不可或缺的部分。这里结合工作中的一些实践经验,讨论一下后处理中另一个关键环节——自动曝光在移…

Consul SpringCloudK8S

背景说起微服务,就需要用到SpringCloud,目前市面上主流的SpringCloud产品有这些:SpringCloudNeflix、Spring Cloud Alibaba、Spring Cloud for AWS、Spring Cloud Azure 和 Spring Cloud Kubernetes。其中SpringCloudNeflix已经不在更新&…

C#开发记录——C#开发的OPC客户端无法连接杰控软件的OPC服务器处理办法

1、某些OPC 客户端连接本地服务器失败 某些OPCDa 客户端,例如ABBDCS,.WinCC 等,本地连接服务器失败,需特殊设置; C#开发的就遇到此情况,排查原因,停滞了好几天,终于解决 1.1、打开DCOM 配置,64 位系统需执行: 1.2、从组件服务->计算机-&…

iOS UI自动化测试详解

前言: 小目标 关于UI自动化的定义,我想要的是自动地按照流程去点击页面、输入数据,不需要人去参与,节省人工时间。比如登录,能够自己去填写用户名&密码,然后点击按钮跳转到下一个页面等。在能够保证业…

pandas表格并表(累加合并)

今天需求是用pandas的两张表格合并起来,其中重复的部分将数据进行相加。 用到的是combine()这个函数。 函数详细的使用可以看这个大佬的文章: https://www.cnblogs.com/traditional/p/12727997.html (这个文章使用的测…

vue之为什么data属性是一个函数而不是一个对象?

为什么data属性是一个函数而不是一个对象为什么data属性是一个函数而不是一个对象?一、实例和组件定义data的区别二、组件data定义函数与对象的区别三、原理分析四、结论为什么data属性是一个函数而不是一个对象? 一、实例和组件定义data的区别 vue实例…

嵌入式物联网【数据处理篇】特殊字符处理(Postman 400 Bad Request)

目录 一、Postman 400 Bad Request 二、C语言特殊字符处理 三、QUrl toPercentEncoding 处理url中含有特殊字符转码 16进制ASCII码对照表 一、Postman 400 Bad Request http请求链接中的特殊字符处理 解决包括Postman 中的post、get等链接请求中的特殊字符(如…

谷歌关键词优化多少钱【2023年调研】

本文主要分享Google关键词排名优化的一些成本调研,方便大家参考。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 今年2023年了,谷歌关键词优化到底要多少钱? 答案是:价格在2w~25w左右…

c++终极螺旋丸:₍˄·͈༝·͈˄*₎◞ ̑̑“类与对象的结束“是结束也是开始

文章目录 前言一.构造函数中的初始化列表 拷贝对象时的一些编译器优化二.static成员三.友元四.内部类总结前言 前两期我们将类和对象的重点讲的差不多了,这一篇文章主要进行收尾工作将类和对象其他的知识点拉出来梳理一遍,并且补充前两篇没有讲过的…

第3集丨Java中的异常、处理方式及自定义异常汇总

目录一、异常的分类1.1 常见的运行时异常1.2 常见的检查异常1.3 继承关系二、异常处理机制三、try…catch…finally四、声明抛出异常五、人工抛出异常六、自定义异常任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界&a…

别学英语了,真的

文 / 王不留(微信公众号:王不留) 这两年,很多朋友加我微信后,第一句常是,学英语有什么用啊? 我会统一给出真诚答复:没用,真的。 看新闻,中文海量信息已经严重…

建筑行业固定资产管理解决方案

建筑行业的固定资产种类和数量都较多,常用的固定资产有:办公设备、机械、设备、工具等。设备的调拨、购置、测试、验收、建帐立卡、分类编号、技术档案、供应分配、清查盘点、提取折旧、报废、设备维修、设备保养、备件管理、设备巡检和点检等工作&#…

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例 如下图所示,打开TIA博途创建一个新项目,并通过“添加新设备”组态 S7-1200 客户端 ,选择 CPU1214C DC/DC/DC (client IP:192.168.0.102),建立新子网; 首先编写客户端程序:打开OB1编程界面,选择指令…

图片如何提取文字?

在当今信息爆炸的时代,图文并茂已经成为了一个广告宣传的常用方式。然而,图片中的文字信息往往难以获取,尤其对于那些需要快速获取信息的人们来说,阅读图片中的文字会是一项繁琐且费时的任务。现在,我们有一个好消息要…

如何熟练掌握Python在气象水文中的数据处理及绘图【免费教程】

pythonPython由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多…

[python课程设计1]学生成绩管理系统

引言本课程设计使用数据库,熟悉了Python语言操作数据库,对数据库的增删改查,实现Qt designer界面设计以及excel表格的读写,代码通俗易懂,方便对所学知识的掌握。需求分析用类对学生成绩、代码封装使得操作使用简单&…

java开启线程的四种方法

文章目录1、继承Thread类1.1 代码实现1.2 测试结果2、实现Runnable接口2.1 方式一:直接实现Runnable接口2.1.1 代码实现2.1.2 测试结果2.2 方式二:匿名内部类2.2.1 代码实现2.2.2 测试结果3、实现Callable接口3.1 代码实现3.2 测试结果4、创建线程池4.1 …

常见帧率计算方法实际效果对比及EasyCVR平台的帧率计算方法

什么是帧、帧数、帧率? 帧 (Frame) 帧可以理解为视频或者动画中的每一张画面,而视频和动画特效是由无数张画面组合而成,每一张画面都是一帧。 帧数(Frames) 帧数是帧生成的数量。如果一个动画…