背包问题

Merkle、Hellman提出的问题
背包问题(Knapsack problem)是一种组合优化的NP完全问题。[1][2][3]问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。[4][5]问题的名称来源于如何选择最合适的物品放置于给定背包中。[6][7][8]相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。[9][10][11]也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkle和Hellman提出的。[12][13][14]背包问题已经研究了一个多世纪,早期的作品可追溯到1897年  数学家托比亚斯·丹齐格(Tobias Dantzig,1884-1956)的早期作品,并指的是包装你最有价值或有用的物品而不会超载你的行李的常见问题。[15][16][17]

基本介绍

它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放到背包中并加密消息。背包中的物品总重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而引人注目。但是,大多数一次背包体制均被破译了,因此很少有人使用它。

定义

我们有n种物品,物品j的重量为wj,价格为pj。