Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 0\1的贪婪算法矩阵_Algorithm_Matrix_Swap_Greedy - Fatal编程技术网

Algorithm 0\1的贪婪算法矩阵

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。使用交换参数正式证明该算法是正确的 所以我试着对我

我正在学习算法考试,我找不到解决下一个问题的方法:

输入:正整数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坐标是第一个不匹配的坐标,然后再次失败

然后我尝试了一种不同的方法,假设我在贪婪中有一组步骤,并交换算法的整个步骤(基本上与第一个步骤的想法相同),但我仍然没有找到一种方法来保证我没有创建一个不太优化的解


提前感谢您的帮助

考虑一些输入
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