19、集合与几何问题的算法解析

集合与几何问题的算法解析

1. 集合问题概述

集合问题在算法领域中占据着重要地位,许多实际问题都可以转化为集合相关的问题进行求解。这里将介绍几种常见的集合问题及其解决方法,主要运用动态规划这一强大的算法思想。

2. 经典集合问题
2.1 背包问题
  • 定义 :给定 $n$ 个物品,其重量分别为 $p_0, \cdots, p_{n - 1}$,价值分别为 $v_0, \cdots, v_{n - 1}$,以及一个容量为 $C$(整数)的背包。问题是找到一个物品子集,使得子集的总价值最大,且总重量不超过背包容量 $C$。此问题属于 NP 难题。
  • 关键观察 :对于 $i \in {0, \cdots, n - 1}$ 和 $c \in {0, \cdots, C}$,设 $Opt[i][c]$ 为在索引从 0 到 $i$ 的物品中,重量不超过 $c$ 时所能获得的最大价值。当 $i = 0$ 时,若 $p_0 > c$,则 $Opt[0][c] = 0$;否则 $Opt[0][c] = v_0$。对于 $i$ 较大的情况,索引为 $i$ 的物品有两种选择:拿或不拿。拿的情况下,可用容量减少 $p_i$,有如下关系:
    [
    Opt[i][c] = \max
    \begin{cases}
    Opt[i - 1][c - p_i] + v_i & \text{拿物品,前提 } c \geq p_i \
    Opt[i - 1][c] & \text{不拿物品}
    \end{cases}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值