37、硬背包问题的通用新算法

硬背包问题的通用新算法

1. 引言

0 - 1 背包问题,也称为子集和问题,是著名的 NP 难题,常被用于密码系统的构建。该问题的一个实例包含一个由 n 个正整数组成的列表 $(a_1, a_2, \cdots, a_n)$ 以及另一个正整数 S。它有两种形式:
- 决策背包问题 :判断 S 是否可以写成 $S = \sum_{i = 1}^{n} \epsilon_i a_i$ 的形式,其中 $\epsilon_i$ 的值在 ${0, 1}$ 中。
- 计算背包问题 :若至少存在一个解,则找出解 $\epsilon = (\epsilon_1, \cdots, \epsilon_n)$。

决策背包问题是 NP 完全问题。已知一个能解决决策问题的神谕,通过对该神谕进行 n 次调用,就可以解决计算问题。

背包问题于 1978 年由 Merkle 和 Hellman 引入密码学领域。Merkle - Hellman 公钥密码系统的基本思想是将一个简单的背包实例隐藏在一个看似困难的实例中,但该方案被 Shamir 利用格规约破解。此后,许多基于背包的密码系统也被格规约方法破解。

背包的密度定义为 $d = \frac{n}{\log_2(\max_i a_i)}$。当 $d < 1$ 时,给定的和 S 通常可以唯一地反转,这些背包可用于加密;当 $d > 1$ 时,大多数和有许多原像,背包可用于哈希。然而,对于加密而言,密度不能太低,因为 Lagarias - Odlyzko 低密度攻击在给定一个能解决格中最短向量问题(SVP)的神谕时,可以解决密度 $d &

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值