作业5
1
(1)答:设正整数集合 S = { s i ∣ i = 1 , 2 , . . . n } S = \{s_i | i =1,2,...n\} S={
si∣i=1,2,...n},每次从 S S S中选取最大的元素 s m a x s_{max} smax构成 S S S的子集 S ′ S' S′,使得当 S ′ S' S′中元素和大于等于 W W W时,包含尽可能少的元素数
(2)答:
贪心选择性
引理1:设正整数集合 S = { s i ∣ i = 1 , 2 , . . . n } S = \{s_i | i =1,2,...n\} S={ si∣i=1,2,...n}, S S S中最大的元素为 s m a x s_{max} smax,则存在一个 S S S的子集选择问题的某个优化解包含 s m a x s_{max} smax。
证:设 A A A是一个优化解, A A A中最大的元素为 a m a x a_{max} amax,
如果 a m a x = s m a x a_{max} = s_{max} amax=smax,引理成立。
如果 a m a x ≠ s m a x a_{max} \ne s_{max} amax=smax,令 B = A − { a m a x } ∪ { s m a x } B = A - \{a_{max}\} \cup \{s_{max}\} B=A−{
amax}∪{
smax}
因为 A A A中元素从 S S S中选取,所以 a m a x ≤ s m a x a_{max} \le s_{max} amax≤smax, A 中 元 素 和 ≥ W A中元素和 \ge W A中元素和≥W,则 B 中 元 素 和 ≥ W B中元素和 \ge W B中元素和≥W,且 ∣ A ∣ = ∣ B ∣ |A| = |B| ∣A∣=∣B∣,即 B B B是一个优化解,且包含 s m a x s_{max} smax。
优化子结构
引理2:设正整数集合 S = { s i ∣ i = 1 , 2 , . . . n } S = \{s_i | i =1,2,...n\} S={ si∣i=1,2,...n}, S S S中最大的元素为 s m a x s_{max} smax,设 A A A是 S S S的子集选择问题的优化解且包含 s m a x s_{max} smax,则 A ′ = A − { s m a x } A' = A - \{s_{max}\} A′=A−{ smax}是 S − { s m a x } S - \{s_{max}\} S−{ smax}对于 W − s m a x W-s_{max} W−smax选择问题的优化解。
证:假设 A ′ = A − { s m a x } A' = A - \{s_{max}\} A′=A−{
smax}不是 S − { s m a x } S - \{s_{max}\} S−{
smax}对于 W − s m a x W-s_{max} W−smax选择问题的优化解。则存在 B ′ B' B′,使得 B ′ 元 素 和 ≥ W − s m a x B'元素和 \ge W - s_{max} B′元素和≥W−smax,且 ∣ B ′ ∣ < ∣ A ′ ∣ |B'| < |A'| ∣B′∣<∣A′∣。
那么构造 B = { s m a x } ∪ B ′ B = \{s_{max}\} \cup B' B={
smax}∪B′, B 中 元 素 和 ≥ W B中元素和 \ge W B中元素和≥W, B B B是 S S S的一个解。
∵ ∣ A ∣ = ∣ A ′ ∣ + 1 , ∣ B ∣ = ∣ B ′ ∣ + 1 > ∣ A ′ ∣ + 1 = ∣ A ∣ , 与 A 是 优 化 解 矛 盾 ∴ \because |A| = |A'| + 1 , |B| = |B'| + 1 > |A'| + 1 = |A|,与A是优化解矛盾\\ \therefore ∵∣A∣=∣A′∣+1,∣B∣=∣B′∣+1>∣A′∣+1=∣A∣,与A是优化解矛盾∴ A ′ = A − { s m a x } A' = A - \{s_{max}\} A′=A−{
smax}是 S − { s m a x } S - \{s_{max}\} S−{
smax}对于 W − s m a x W-s_{max} W−smax选择问题的优化解
(3)答:
算法伪代码
- 输入:集合 S S S,阈值 W W W
- 输出: S ′ S' S′,元素之和不小于 W,且 S’是满足这个条件的子集合中包含元素数量最少的。
selectW(S,W)
sort(S);
S' <- new Set();
sum <- 0;
while(sum < W)
sum += S.peek();
S'.offer(S.poll())
return S'
时间复杂度分析
输入规模: n n n
时间复杂度:排序时间复杂度为 O ( n log n ) O(n\log{n}) O(nlogn),贪心选择步骤时间复杂度为 O ( n ) ∴ T ( n ) = O ( n log n ) O(n) \\ \therefore T(n) = O(n\log{n}) O(n)∴T(n)=O(nlogn)
2
(1)答:在剩余区间 [ x , n ] [x,n] [x,n]中,对于剩余的区间集合 S = { [ a i , b i ] ∣ 1 ≤ a i ≤ i ≤ b i ≤ n , i = 1 , 2... n } S = \{[a_i,b_i] | 1 ≤ a_i ≤ i ≤ b_i ≤ n, i =1,2...n\} S={
[ai,bi]∣1≤ai≤i≤bi≤n,i=1,2...n},选取满足 a i ≤ x a_i ≤ x ai≤x元素中, b i b_i bi值最大的区间。
(2)答:
贪心选择性
引理1:设区间集合 S = { [ a i , b i ] ∣ 1 ≤ a i ≤ i ≤ b i ≤ n , i = 1 , 2... n } S = \{[a_i,b_i] | 1 ≤ a_i ≤ i ≤ b_i ≤ n, i =1,2...n\} S={ [ai,bi]∣1≤ai≤i≤bi≤n,i=1,2...n},获得满足 a i = 1 a_i = 1 ai=1的集合并按照 b i b_i bi的值排序,得 S ′ = { [ 1 , b j ] ∣ b j ≥ b j + 1 , b j > 1 } S' = \{[1,b_j] | b_j ≥ b_{j+1},b_j > 1\} S′={ [1,bj]∣bj≥bj+1,bj>1},如果 S S S存在优化解,则存在一个 S S S的优化解包含 [ 1 , b j ] , j = 1 [1,b_j], j = 1 [1,bj],j=1。
证:设 A A A为一个优化解, A A A中以1开始的区间为 [ 1 , b a ] , b a > 1 [1,b_a],b_a > 1 [1,ba],ba>1
如果 b a = b 1 b_a = b_1 ba=b1,引理成立。
如果 b a ≠ b 1 b_a \ne b_1 ba=b1,令 B = A − { [ 1 , b a ] } ∪ { [ 1 , b 1 ] } B = A - \{[1,b_a]\} \cup \{[1,b_1]\} B=A−{
[1,ba]}∪{
[1,b1]}。
因为 b 1 ≥ b a b_1 ≥ b_a b1≥ba,所以 B B B仍是 S S S的一个解,且 ∣ B ∣ = ∣ A ∣ |B| = |A| ∣B∣=∣A∣,即 B B B是 S S S的一个优化解且包含 [ 1 , b 1 ] [1,b_1] [1,b1]。
优化子结构
引理2:设区间集合 S = { [ a i , b i ] ∣ 1 ≤ a i ≤ i ≤ b i ≤ n , i = 1 , 2... n } S = \{[a_i,b_i] | 1 ≤ a_i ≤ i ≤ b_i ≤ n, i =1,2...n\} S={ [ai,bi]∣1≤ai≤i≤bi≤n,i=1,2...n},获得满足 a i = 1 a_i = 1 ai=1并按照 b i b_i bi的值排序的集合 S ′ = { [ 1 , b j ] ∣ b j ≥ b j + 1 , b j > 1 } S' = \{[1,b_j] | b_j ≥ b_{j+1},b_j > 1\} S′={ [1,bj]∣bj≥bj+1,bj>1},如果 S S S存在优化解,假设 A A A是包含 [ 1 , b 1 ] [1,b_1] [1,b1]的优化解,那么,如果 S − { [ 1 , b 1 ] } S - \{[1,b_1]\} S−{ [1,b1]}对于区间 [ b 1 , n ] [b_1,n] [b1,n]的优化解存在, A ′ = A − { [ 1 , b 1 ] } A' = A - \{[1,b_1]\} A′=A−{ [1,b1]}是它的优化解。
证: 假设 A ′ = A − { [ 1 , b 1 ] } A' = A - \{[1,b_1]\} A′=A−{
[1,b1]}不是 S − { [ 1 , b 1 ] } S - \{[1,b_1]\} S−{
[1,b1]}对于区间 [ b 1 , n ] [b_1,n] [b1,n]的优化解。则存在 B ′ B' B′,满足覆盖的条件下, ∣ B ′ ∣ < ∣ A ′ ∣ |B'| < |A'| ∣B′∣<∣A′∣。
那么构造 B = B ′ ∪ { [ 1 , b 1 ] } B = B' \cup \{[1,b_1]\} B=B′∪{
[1,b1]}, B B B是 S S S关于区间 [ 1 , n ] [1,n] [1,n]的一个解。
∣ A ∣ = ∣ A ′ ∣ + 1 , ∣ B ∣ = ∣ B ′ ∣ + 1 < ∣ A ′ ∣ + 1 = ∣ A ∣ |A| = |A'| + 1, |B| = |B'| + 1 < |A'| + 1 = |A| ∣A∣=∣A′∣+1,∣B∣=∣B′∣+1<∣A′∣+1=∣A∣,与 A A A是 S S S的优化解矛盾。
(3)答:
算法伪代码
- 输入:区间对数组 i n t e r v e l s = [ [ l 1 , r 1 ] , [ l 2 , r 2 ] , . . . . [ l n , r n ] ] intervels = [[l_1,r_1],[l_2,r_2],....[l_n,r_n]] intervels=[[l1,r1],[l2,r2],....[ln,rn]],区间边界 n n n
- 输出:最少区间覆盖集合
selectN(intervels, n)
d <- 1;
sort(intervels); // 按照b_i升序排序。
inervels[n + 1] = new Intervel(n, n)
for j <- 1 to n:
if intervels[j].l <= d && intervels[j + 1].l > d Then
if d = intervels[j].r Then
return 无优化解
results.add(intervels[j]);
d <- intervels[j].r;
if d = n Then return results
else return 无优化解;
时间复杂度分析
输入规模: k = 2 n k = 2n k=2n
时间复杂度:排序时间复杂度为 O ( n log n ) O(n\log{n}) O(nlogn),贪心选择步骤时间复杂度为 O ( n ) ∴ T ( k ) = O ( k log k ) O(n) \\ \therefore T(k) = O(k\log{k}) O(n)∴T(k)=O(klogk)
3
(1)答:每次从 A 、 B A、B A、B中选择剩余元素中最大的元素 A [ m a x a ] 、 B [ m a x b ] A[max_{a}]、B[max_{b}] A[maxa]、B[maxb], a ( m a x a ) = m a x b a(max_{a}) = max_{b} a(maxa)=maxb。
(2)答:
贪心选择性
引理1:设数组 A [ 1 , 2... n ] , B [ 1 , 2... n ] A[1,2...n],B[1,2...n] A[1,2...n],B[1,2...n]按升序排列,即 A [ i ] ≤ A [ i + 1 ] , B [ j ] ≤ B [ j + 1 ] , i = 1 , 2 , . . . n − 1 A[i] \le A[i + 1], B[j] \le B[j + 1],i = 1,2,...n - 1 A[i]≤A[i+1],B[j]≤B[j+1],i=1,2,...n−1。选择 B [ n ] B[n] B[n]分配给 A [ n ] A[n] A[n],即 a ( n ) = n a(n) = n a(n)=n,则存在某个优化解包含此分配。
证:设优化解 S S S, S S S中对 A [ n ] 的 分 配 为 a ( n ) A[n]的分配为a(n) A[n]的分配为a(n)。
如果 a ( n ) = n a(n) = n a(n)=n,引理成立。
如果 a ( n ) ≠ n a(n) \ne n a(n)=n,设 a ( n ) = j , a ( k ) = n a(n) = j,a(k) = n a(n)=j,a(k)=n,则优化解 S S S中包含 ∣ A [ k ] − B [ n ] ∣ + ∣ A [ n ] − B [ j ] ∣ |A[k] - B[n]|+|A[n] - B[j]| ∣A[k]−B[n]∣+∣A[n]−B[j]∣。
为了构造解 S ′ S' S′,讨论
情况一: A [ k ] > B [ n ] A[k] > B[n] A[k]>B[n]
则有 ∣ A [ k ] − B [ n ] ∣ = A [ k ] − B [ n ] , ∣ A [ n ] − B [ j ] ∣ = A [ n ] − B [ j ] |A[k] - B[n]| = A[k] - B[n], |A[n] - B[j]| = A[n] - B[j] ∣A[k]−B[n]∣=A[k]−B[n],∣A[n]−B[j]∣=A[n]−B[j],不妨交换使得 a ( n ) = n , a ( k ) = j a(n) = n,a(k) = j a(n)=n,a(k)=j,得到解 S ′ S' S′,有 ∣ A [ k ] − B [ n ] ∣ + ∣ A [ n ] − B [ j ] ∣ = ∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ |A[k] - B[n]| + |A[n] - B[j]| = |A[n] - B[n]| + |A[k] - B[j]| ∣A[k]−B[n]∣+∣A[n]−B[j]∣=∣A[n]−B[n]∣+∣A[k]−B[j]∣, S ′ S' S′是优化解,且包含 a ( n ) = n a(n) = n a(n)=n。
情况二: A [ k ] ≤ B [ n ] , A [ n ] < B [ j ] A[k] \le B[n], A[n] < B[j] A[k]≤B[n],A[n]<B[j],与①做相同的交换,得到优化解 S ′ S' S′,包含 a ( n ) = n a(n) = n a(n)=n。
情况三: A [ k ] ≤ B [ n ] , A [ n ] ≥ B [ j ] A[k] \le B[n], A[n] \ge B[j] A[k]≤B[n],A[n]≥B[j]
∣ A [ k ] − B [ n ] ∣ + ∣ A [ n ] − B [ j ] ∣ = B [ n ] + A [ n ] − B [ j ] − A [ k ] |A[k] - B[n]| + |A[n] - B[j]| = B[n] + A[n] - B[j] - A[k] ∣A[k]−B[n]∣+∣A[n]−B[j]∣=B[n]+A[n]−B[j]−A[k],交换使得 a ( n ) = n , a ( k ) = j a(n) = n,a(k) = j a(n)=n,a(k)=j,的解 S ′ S' S′。求证 S ′ S' S′为优化解,讨论
① A [ n ] ≥ B [ n ] , A [ k ] ≥ B [ j ] A[n] \ge B[n], A[k] \ge B[j] A[n]≥B[n],A[k]≥B[j],
∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ = A [ n ] + A [ k ] − B [ n ] − B [ j ] |A[n] - B[n]| + |A[k] - B[j]| = A[n] + A[k] - B[n] - B[j] ∣A[n]−B[n]∣+∣A[k]−B[j]∣=A[n]+A[k]−B[n]−B[j]
因为 A [ k ] ≤ B [ n ] A[k] \le B[n] A[k]≤B[n],
所以 ∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ ≤ ∣ A [ k ] − B [ n ] ∣ + ∣ A [ n ] − B [ j ] ∣ |A[n] - B[n]| + |A[k] - B[j]| \le |A[k] - B[n]| + |A[n] - B[j]| ∣A[n]−B[n]∣+∣A[k]−B[j]∣≤∣A[k]−B[n]∣+∣A[n]−B[j]∣
得证。
② A [ n ] ≤ B [ n ] , A [ k ] ≤ B [ j ] A[n] \le B[n], A[k] \le B[j] A[n]≤B[n],A[k]≤B[j],
∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ = B [ n ] + B [ j ] − A [ n ] − A [ k ] |A[n] - B[n]| + |A[k] - B[j]| = B[n] + B[j] - A[n] - A[k] ∣A[n]−B[n]∣+∣A[k]−B[j]∣=B[n]+B[j]−A[n]−A[k]
因为 A [ n ] ≥ B [ j ] A[n] \ge B[j] A[n]≥B[j],同①,得证。
③ A [ n ] ≥ B [ n ] , A [ k ] ≤ B [ j ] A[n] \ge B[n], A[k] \le B[j] A[n]≥B[n],A[k]≤B[j],
∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ = A [ n ] + B [ j ] − B [ n ] − A [ k ] |A[n] - B[n]| + |A[k] - B[j]| = A[n] + B[j] - B[n] - A[k] ∣A[n]−B[n]∣+∣A[k]−B[j]∣=A[n]+B[j]−B[n]−A[k]
因为 B [ j ] ≤ B [ n ] B[j] \le B[n] B[j]≤B[n],同①,得证。
③ A [ n ] ≤ B [ n ] , A [ k ] ≥ B [ j ] A[n] \le B[n], A[k] \ge B[j] A[n]≤B[n],A[k]≥B[j],
∣ A [ n ] − B [ n ] ∣ + ∣ A [ k ] − B [ j ] ∣ = B [ n ] + A [ k ] − B [ j ] − A [ n ] |A[n] - B[n]| + |A[k] - B[j]| = B[n] + A[k] - B[j] - A[n] ∣A[n]−B[n]∣+∣A[k]−B[j]∣=B[n]+A[k]−B[j]−A[n