Algorithm 0\1的贪婪算法矩阵
我正在学习算法考试,我找不到解决下一个问题的方法: 输入:正整数r1,r2…rn和c1,c2…cn 输出:一个n乘n的矩阵A,有0/1个条目,这样对于所有i,第i行的和在 如果存在这样一个矩阵,则A是ri,A中第i列的和是ci。 考虑下面的贪婪算法,该算法构建一行一行。假设第一个 已建造i-1排。设aj为第一i-1行第j列中的1个数。具有最大cj aj的ri列在行中分配1个,其余为1个 其中的列被指定为0。也就是说,仍然需要最多1的列被指定为1。使用交换参数正式证明该算法是正确的 所以我试着对我遇到的最贪婪的问题进行归纳总结, 假设贪婪解和最优解中第i行之前的行是相同的,然后尝试更改第i+1行,使其与贪婪解匹配,并证明它不会创建给定最优解的次优解。然后继续进行k-i迭代,直到整个解决方案相似为止 在尝试了失败后,我尝试了相同的想法,只针对每个坐标,假设ij坐标是第一个不匹配的坐标,然后再次失败 然后我尝试了一种不同的方法,假设我在贪婪中有一组步骤,并交换算法的整个步骤(基本上与第一个步骤的想法相同),但我仍然没有找到一种方法来保证我没有创建一个不太优化的解Algorithm 0\1的贪婪算法矩阵,algorithm,matrix,swap,greedy,Algorithm,Matrix,Swap,Greedy,我正在学习算法考试,我找不到解决下一个问题的方法: 输入:正整数r1,r2…rn和c1,c2…cn 输出:一个n乘n的矩阵A,有0/1个条目,这样对于所有i,第i行的和在 如果存在这样一个矩阵,则A是ri,A中第i列的和是ci。 考虑下面的贪婪算法,该算法构建一行一行。假设第一个 已建造i-1排。设aj为第一i-1行第j列中的1个数。具有最大cj aj的ri列在行中分配1个,其余为1个 其中的列被指定为0。也就是说,仍然需要最多1的列被指定为1。使用交换参数正式证明该算法是正确的 所以我试着对我
提前感谢您的帮助 考虑一些输入
r
和c
以及满足它们的矩阵S
扔掉S
中最后一行的内容,得到一个新矩阵S(n-1)
。如果我们将S(n-1)
输入贪婪算法,并要求它填充最后一行,它显然会恢复一个满意的解
现在,扔掉S
中最后两行的内容,得到S(n-2)
。由于我们知道存在满意的解,我们知道不存在j
使得c(j)-a(j)>2
,并且j
的数目使得c(j)-a(j)==2
小于r(n-1)
。因此,贪婪算法将为后一组j
设置A[n-1,j]=1
,以及其他j
,其中c(j)-A(j)=1
。但是因为我们知道有一个令人满意的解决方案,它必须是在第n-1行被填充后,j
和c(j)-a(j)==1
的数量正好是r(n)
,因此是可满足的
无论如何,我们可以向下扩展:在S(n-k-1)
中,必须是这样的情况:
- 没有任何
使得j
c(j)-a(j)>k+1
- 最多可以有
许多r(n-k)
,这样j
c(j)-a(j)=k+1
- 和Sum(c(j)-a(j))==Sum(r(i),i>=n-k)
n-k
th行之后,必须是这样的情况
- 没有任何
使得j
c(j)-a(j)>k
- 最多可以有
许多r(n-k+1)
,这样j
c(j)-a(j)=k
- 和Sum(c(j)-a(j))==Sum(r(i),i>=n-k+1)
k=0
时,没有任何j
使得c(j)-a(j)>0