【问题标题】:Is there a way to count the number of 1's for each row in a binary matrix in O(n) time complexity?有没有办法以 O(n) 时间复杂度计算二进制矩阵中每一行的 1 的数量?
【发布时间】:2022-01-10 15:17:15
【问题描述】:

输入:

[1, 0, 1],
[0, 1, 0],
[1, 0, 1]

输出: [2, 1, 2]

对于本例,n = 行数或列数

对于给定的二进制矩阵,我能否以 O(n) 的时间复杂度获得每行中 1 的计数的数组?

【问题讨论】:

  • 你试过只使用count()吗? :[l.count(1) for l in list_of_lists]。或者只是一个总和:list(map(sum, list_of_lists))?
  • 是的。循环遍历每一行,并计算该行中零的数量。当然,我假设您的意思是 N 是矩阵的大小
  • 如果不查看数组的每个元素,就无法解决这个问题。因此,最快的算法是查看每个元素一次,并且已经向您展示了该算法的几个版本。正如其他人所说,您的问题含糊不清,n是什么意思?
  • 选择一种语言,尝试一下,失败时发布minimal reproducible example
  • 您陈述问题的方式可能没有 O(n) 解决方案。但是bit counting 有固定时间的解决方案。根据二进制矩阵的实现,您可以在特殊/有限情况下以 O(n) 计算所需的输出数组。

标签: python java matrix time-complexity


【解决方案1】:

如果N 是行数,则没有O(N) 解决方案。您需要访问每个单元格。有N^2 单元格,所以复杂度是O(N^2)

如果您使用位(0 或 1)而不是整数计数来表示矩阵,则可以比迭代位更快地进行位计数。但是,矩阵中仍有O(N^2) 位。即使您将它们打包成每个字 32 或 64 位,您仍然可以访问 O(N^2) 字......所以复杂性保持不变。

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    相关资源
    最近更新 更多