algorithm - 如何重新排序二进制矩阵,使列中至少有 '1' 值

标签 algorithm matlab

我有一个二进制矩阵 A 作为

A=[0 0 0 1
   0 1 1 0;
   0 1 0 1;
   0 0 0 1;
   0 1 1 1]

我想对矩阵 A 重新排序,使至少 1 列具有“1”值。于是,矩阵A就来了

%% switch first col and last col in the first row
A=[1 0 0 0
   0 1 1 0;
   0 1 0 1;
   0 0 0 1;
   0 1 1 1]

现在,A满足了上述条件。是否可以在 MATLAB 中实现它?谢谢大家

第二个例子

A=[1 0 0 1;
   0 0 1 1;
   0 0 0 1]

那么结果是

A=[1 0 0 1;
   0 1 1 0;  %% second and fourth col is switched
   0 0 0 1]

更新:如果 A 行正在运行,会发生什么情况。这意味着在 t=0 时,第一行出现并且 A=[1 0 0 1]。然后下一次,第二排来了。矩阵 A 将是 A=[1 0 0 1; 0 0 1 1]。然后算法将在这里检查,因为第二列。 A 的值为零。执行切换,然后 A 的下一个列出现,依此类推。你能设计帮助我实现该任务吗?

最佳答案

简单的确定性策略,从左上角开始,用第一行填充尽可能多的列,然后继续下一行和下一列。对于剩余的行,只需从第一列重新开始。

%Get rows in which ones can be found.
[~,r]=find(A.');
%Assign new column values for the ones
c=mod(0:numel(r)-1,size(A,2))+1;
B=zeros(size(A));
B(sub2ind(size(A),r(:),c(:)))=1;

关于algorithm - 如何重新排序二进制矩阵,使列中至少有 '1' 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811893/

相关文章:

c++ - 将算法 C++ 无效操作数替换为二进制表达式

arrays - 已知子集大小且数组为范围的子集求和问题

python - 关于for循环 "running times"的问题

java - 是否有计算组件净需求的最佳算法?

java - 为什么插入排序在实践中比冒泡排序和堆排序快?

java - 在 MATLAB for Mac 中启用选项键快捷键

matlab - 在matlab中使用mapreduce编程技术

algorithm - 仅沿数据上边界拟合直线的高效算法

matlab - 如何将控制台输出分配给matlab中的字符串?

java - Matlab 中的 GZIP 用于大文件