给定二进制 MxN 矩阵和切换列的能力,最大化行相同性?

2023-12-29

如果你有一个由 1 和 0 组成的二进制矩阵,并且能够切换列(将列中的所有 1 更改为 0,将所有 0 更改为 1),那么如何找到所有可能的“纯”行的最大数量列切换的组合? “纯”表示该行全为 0 或全为 1。

Ex:

1 0

1 0

1 1

您可以切换任一列以获得 2 行“纯”行,这是您能做的最好的事情(同时切换两列也不是更好),因此您返回 2(“纯”行的最大数量)。

我似乎无法找到一种有效的方法来做到这一点。到目前为止,我得到的唯一方法是使用一堆循环和蛮力,并通过检查一行的总和是否为 0(全 0)或 N(一行中的元素数)来检查相同性。


Update

经过OP的澄清后,最大纯行问题是查找切换后变为 00...0 或 11...1 的最大行数。我已相应更新了我的解决方案。

请注意,我们有以下事实:

  1. If two rows ri and rj reduce to a pure row after toggling, then we must have ri = rj to start with.

  2. If rirj and ri overlaps rj (i.e. some of their corresponding column are the same), then both of them cannot map to a pure row.

上述两个事实直接来自以下观察:

Max number of "pure" rows is the same as the max number of identical rows

Proof

我们声称构成最大纯问题解的所有行在矩阵 M 中必须相同。

Suppose we are given a m-by-n matrix M, and we have found a solution of the max-pure row problem. Let rows ri and rj be two arbitrary rows that get reduce to pure rows after toggling.

Observe that after all the necessary toggling operation on the columns (denote by σ1, σ2, ..., σk), ri and rj are both "pure" rows. i.e. We have the following:

σ1(σ2(...(σk(ri)...)) = σ1(σ2(...(σk(rj)...)) = 00...0

or

σ1(σ2(...(σk(ri)...)) = σ1(σ2(...(σk(rj)...)) = 11...1

So after applying all these toggling operations, ri and rj will equal each other. If we undo the very last toggling (i.e. we toggling the same column entry of these rows), it is obviously that both ri and rj will still map to the same output. i.e. We have the following:

σ2(σ3(...(σk(ri)...)) = σ2(σ3(...(σk(rj)...))

If we we continue undoing the toggling operations, we can conclude that ri = rj. In other words, if you pick any arbitrary rows from a solution of the max-pure problem, these rows must be identical in the beginning.


Idea

Given a row ri, if it can be reduce to the pure row, say 00...0, then we know that another row rj cannot be reduced to 11...1 if ri overlaps with rj (from fact 2 above). We can only hope that another row rk which does not overlap with ri to reduce to 11...1.


算法

根据前面的想法,我们可以有以下简单的算法来解决最大纯行问题。

We first scan over the rows of matrix M, and then find all the unique rows of the matrix (denote by s1, s2, ..., sk). We let count(si) denotes the number of times si appears in M. We then loop over all the pairs (si, sj) to determine the max-pure row number as below:

int maxCount = 0;

for each row si:
    for each  sj ≠ si:
        if (sj overlaps si)
            continue;
        else
            if (count(si) + count(sj) > maxCount)
                // We have found a better pair
                maxCount = count(si) + count(sj);    

return maxCount;

We are doing O(n) works in the inner for loop (for entry-wise checking whether two rows overlap), and the loops are over O(m2) rows in the worst-case, so the running time of the algorithm is O(nm2).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定二进制 MxN 矩阵和切换列的能力,最大化行相同性? 的相关文章

  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • SQL 中的链表

    在 MySQL 数据库中存储链接列表的最佳方法是什么 这样插入就很简单 即 您不必每次都重新索引一堆内容 并且可以轻松地按顺序拉出列表 使用 Adrian 的解决方案 但不是增加 1 而是增加 10 甚至 100 然后可以按照要插入的内容之
  • 用 R 将矩阵划分为 N 个大小相等的块

    如何使用 R 将矩阵或数据帧划分为 N 个大小相等的块 我想水平切割矩阵或数据框 例如 给定 r 8 c 10 number of chunks 4 data matrix seq r c nrow r ncol c gt gt gt da
  • O(n^2) 与 O (n(logn)^2)

    时间复杂度是O n 2 or O n logn 2 better 我知道当我们简化它时 它就变成了 O n vs O logn 2 and logn lt n 但是关于logn 2 n is only less than log n 2 f
  • 如何在R中用随机数填充矩阵?

    expand grid i rexp 5 rate 0 1 它只创建一列 但有什么方法可以轻松地将其乘以 5 列吗 我的意思是 matlab 的做事方式 比如rand exp 0 1 10 20 创建一个指数分布随机数的矩阵 平均值为 0
  • 用矩阵变换 3D 向量的方法

    我一直在阅读一些关于用矩阵转换 Vector3 的文章 并且正在努力深入研究数学并自己编码 而不是使用现有代码 无论出于何种原因 我的学校课程从未包含矩阵 所以我正在填补我的知识空白 值得庆幸的是 我认为我只需要一些简单的东西 背景是我正在
  • 如何识别数据集中其他列之和的列

    我想编写一个函数 最好用 R 语言 但也欢迎其他语言 它可以识别数据集中列之间的关系 仅限于加法 减法 其实际应用是在大型多列财务数据集上运行它 其中某些列是其他列的小计 并识别此类小计 理想情况下 我希望允许一些小的差异 例如允许舍入问题
  • 如何确定字符串的最小公约数?

    我在面试时被问到以下问题 并被它难住了 我遇到的部分问题是要下定决心要解决什么问题 起初我并不认为这个问题在内部是一致的 但后来我意识到它要求你解决两个不同的问题 第一个任务是弄清楚一个字符串是否包含另一个字符串的倍数 但第二个任务是在两个
  • 在大文件中查找重复项

    我有一个非常大的文件 大约有 1500 万个条目 文件中的每一行都包含一个字符串 称为键 我需要使用 java 查找文件中的重复条目 我尝试使用哈希图并检测重复的条目 显然 这种方法向我抛出了 java lang OutOfMemoryEr
  • 如何计算一组字符串的最短唯一前缀?

    这是一个非常常见的算法命令行解析 给定一组预定义的长选项名称 计算唯一标识这些选项之一的最短前缀 例如 对于以下选项 help hostname portnumber name polymorphic 这将是输出 he ho por n p
  • 打印从 1 到 100 的质数

    此 C 代码打印出以下素数 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 但我不认为这就是我的书所希望的写作方式 它提到了一些关于数字的平方根的内容
  • Numpy 中矩阵乘以另一个矩阵的每一行

    我有一个大小为 4x4 的齐次变换矩阵和一个大小为 nx3 的轨迹 该轨迹的每一行都是一个向量 我想将齐次变换矩阵乘以轨迹的每一行 下面是代码 append zero column at last trajectory np hstack
  • 埃拉托斯特尼筛法是生成 1 到 N 素数的最佳算法吗?

    我在一次采访中被问到这个问题 我使用埃拉托色尼筛子概念和数组实现了一种算法 有没有更好的方法来解决这个问题 对于不知道筛子的人 请点击以下链接 http en wikipedia org wiki Sieve of Eratosthenes
  • 读取4个点的坐标。他们做一个正方形吗?

    我计算点之间的距离 如果距离相等 则点构成一个正方形 否则不 仅当我按以下顺序读取坐标 A x y B x y C x y D x y 或相反时 我的代码才有效 但是如果我这样读 例如 A x y B x y D x y C x y 它将不
  • 如何在大空间尺度上加速A*算法?

    From http ccl northwestern edu netlogo models community Astardemo http ccl northwestern edu netlogo models community Ast
  • 大小为 n 的数组,其中一个元素 n/2 次

    给定一个由 n 个整数组成的数组 其中一个元素出现超过 n 2 次 我们需要在线性时间和恒定的额外空间中找到该元素 YAAQ 又一个数组问题 我有一种偷偷的怀疑 这类似于 在 C 中 We don t need an array publi
  • 计算按前两列中的索引分组的 numpy 数组条目的第 N 列的总和?

    我想循环以下内容check matrix以这样的方式 代码可以识别第一个和第二个元素是否是1 and 1 or 1 and 2ETC 然后对于每个单独的类对 即1 1 or 1 2 or 2 2 代码应将最后一个元素 在本例中索引为 8 乘
  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • 哪种算法可以有效地找到路径一定距离内的一组点?

    给定一组点s 一组 x y 坐标 和由连接一组点的线段组成的路径l 描述一种有效的算法 可用于从s在指定距离内d路径的l 其实际应用可能是查找沿城市之间的公路旅行路径 10 英里内任意位置的餐馆列表 For example in the f

随机推荐

  • 如何更改 conemu 中的字符集/区域设置?

    我通过 conemu 使用 gitbash 我有一个字符集问题 其中字符在 git bash 中通过 conemu 和直接 git bash 看起来错误 我通过将 minttyrc 中的区域设置设置为 在 gitbash 中修复了它 Bol
  • 何时使用嵌入式数据库

    我正在编写一个应用程序 它解析一个大文件 生成大量数据并用它进行一些复杂的可视化 由于所有这些数据无法保存在内存中 因此我做了一些研究 并开始考虑将嵌入式数据库作为这些数据的临时容器 我的问题是 这是解决这个问题的传统方法吗 嵌入式数据库
  • 命名约定:寻找混合英语和领域/工作流术语的替代方案

    尽管在我们公司 所有人的母语都不是英语 但我们还是努力用英语编写文档 代码和注释 当然 除了与用户相关的内容之外 几乎所有内容都是如此 只要业务术语是可翻译的并且不太特定于该领域 这就可以了 但是 一旦业务术语变得过于具体 要么没有适当的翻
  • Apache 重写子网 IP 范围

    有人可以告诉我如何将以下 IP 范围 属于 Cloudfront 放入 mod rewrite 中吗 我希望将 example com 的非 www 请求重定向到 www example com 但不重定向来自以下 IP 范围的任何 IP
  • 为什么我必须刷新页面才能使 JavaScript 函数正常工作?

    我正在开发一个移动网站并使用 jQuery 当我加载某个页面并单击所需的按钮时 代码在刷新页面之前不会执行 为什么是这样 我是这样的 script js document ready function user save click fun
  • CAShapeLayer 的中风结束没有动画

    这是我用来制作动画的代码CAShapeLayer progressBarLayer strokeEnd CGFloat progressToDrawForProgress progress let progressAnimation CAB
  • 将 git 存储库复制到 USB 驱动器

    我正在开发一个开源项目 我的机器上有一个包含所有代码的 git 存储库 该存储库有点大 我想在无法访问我的计算机时继续处理它 如果我将存储库复制到我的 USB 驱动器中 它的行为是否仍然像我在计算机中的原始存储库上一样 相同的配置等 如果复
  • 如何在 where 子句中使用 row_number

    我正在尝试使用窗口函数来获取最近的 n 条记录 如下从这里 https stackoverflow com questions 61570170 something like select distinct on but for n 1 6
  • 如何在 Fortran 中重写结构体构造函数

    目前是否可以重写 Fortran 中的结构构造函数 我见过这样的建议示例 例如在 Fortran 2003 规范中 module mymod type mytype integer x Other stuff end type interf
  • WPF 应用程序可以进行依赖注入吗?

    我想开始在我的 WPF 应用程序中使用依赖注入 主要是为了更好的单元可测试性 我的应用程序主要是按照 M V VM 模式构建的 我正在看Autofac https code google com p autofac 对于我的 IoC 容器
  • Firebase 推送通知点击不起作用

    我在使用 firebase 实现通知时遇到问题 点击事件不起作用 我正在使用 HTTP 1 版本发送不记名令牌 message token 8888 usertoken 8888 notification title Background
  • OpenCV 如何计算二进制对象的面积? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 OpenCV 和 c 二值化后我有黑白图像 当我只有一个点 x y 属于该对象时 如何计算对象的面积 由于它是二值图像 因
  • 只保留使用过的类型并删除未使用的类型

    有什么方法可以从项目中删除未使用的类型 代码 假设我正在使用NAudio 源代码 在我的控制台应用程序中 我只使用WaveIn从中类 有什么方法可以让我从代码中删除未使用的类并只保留WaveIn班级和班级WaveIn取决于 沿着树摇晃的方向
  • verifyError:错误#1079:加载的代码中不允许使用本机方法

    我有一个用 AS3 编译的 Android iOS 应用程序 我遇到了问题 建议升级到 Flash Builder 4 7 从 4 6 开始 我这样做了 当我尝试使用新的 Air 3 4 运行时 出现以下错误 VerifyError Err
  • Pydev 代码覆盖结果不出现

    我已经设置了代码覆盖率以与 pydev 一起运行 但结果没有出现 下列的这个答案 https stackoverflow com questions 297294 integrating command line generated pyt
  • Rails 4 - Pundit - 如何编写范围

    我正在尝试学习如何将 Pundit 与 Rails 4 结合使用 过去 2 年我一直在尝试学习这一点 并且正在慢慢取得一点点进展 我也在尝试学习如何编写范围 我仍在尝试找出如何将建议翻译成简单的英语 以便我可以开始理解 我陷入了专家策略使用
  • 如何在Python中按字典的值对字典列表进行排序?

    如何按特定键的值对字典列表进行排序 鉴于 name Homer age 39 name Bart age 10 当排序时name 它应该变成 name Bart age 10 name Homer age 39 The sorted htt
  • Web API 和 Web 服务有什么区别?

    有什么区别吗web API and a 网络服务 或者它们是同一个吗 Web 服务通常提供WSDL https en wikipedia org wiki Web Services Description Language您可以从中自动创建
  • 我如何搜索过去 x 天内创建的 Github 问题?

    Also 在这里问 https stackoverflow com questions 38729663 how do i search github issues created in the last seven days但在 2016
  • 给定二进制 MxN 矩阵和切换列的能力,最大化行相同性?

    如果你有一个由 1 和 0 组成的二进制矩阵 并且能够切换列 将列中的所有 1 更改为 0 将所有 0 更改为 1 那么如何找到所有可能的 纯 行的最大数量列切换的组合 纯 表示该行全为 0 或全为 1 Ex 1 0 1 0 1 1 您可以