以有效的方式计算最高行和

时间:2014-06-27 17:59:24

标签: matrix

您好我正在尝试解决一个问题。我有m * n矩阵。它是整数矩阵,只有0和1。我想找出所有元素之和最高的行。我用简单的解决方案解决了这个我使用2 for循环并计算每行的总和。但我想找到更有效的方法来做到这一点。任何人都有这个想法。我需要优化的解决方案。谢谢。

1 个答案:

答案 0 :(得分:2)

让我们考虑矩阵的不同行中的任何两个元素。只要选择两个,只要它们不在同一行中就没关系。将矩阵的每个其他元素设置为零。然后我们可以通过在我们选择的一个元素中写入1而在另一个元素中写入0来选择哪一行作为答案。

这对我说的是,在最坏的情况下,无论你多么聪明,你可能必须检查矩阵的O(m * n)个元素才能找到唯一非零的元素。值。所以你永远不会有比O(m * n)更好的最坏情况运行时间。

但是可以在某些情况下使程序短路。假设到目前为止,您到目前为止检查的任何行中元素的最高总和是x。现在,您正在检查包含n元素的新行。如果,当您检查这些元素的k时,这些k元素的总和小于x - n + k,那么您肯定知道该行中元素的总和是小于x,你不需要进一步查看该行。

在最坏的情况下,该算法仍为O(mn),但在对矩阵内容的一些合理假设下,其平均(平均)运行时间将小于应用于同一矩阵的朴素算法。它也可以通过并行处理来完成,虽然我认为这会导致更多的步骤(平均而言),虽然分成更多的处理器。也就是说,我希望“加速因子”略低于使用的处理器数量。