【发布时间】:2011-04-14 02:20:54
【问题描述】:
给定一个包含 1 和 0 的 N*N 矩阵并给定一个整数 k,找到一个包含 k 个 1 的矩形区域的最佳方法是什么?
【问题讨论】:
-
有趣的问题。您是否只寻找一个地区? N 和 k 通常有多大,1 和 0 的概率分布是多少?算法需要多快?我猜你不知道答案,因为这是一个面试问题,但这就是我要问的。
-
了解更多信息非常重要。如果 p 是 1 的概率,并且 k / p 远小于 N,那么 最简单 的方法就是尝试单行或单列。取一个 1xk 区域,计算一个的数量,然后将单元格添加到最后,直到你有 k 个。如果 k /p 远小于 N,则这很有可能起作用。当然,如果一排不符合要求,你可以继续下一个……毕竟你有 N 个。但无论如何,什么是“最好的”?最好的最坏情况时间?最佳平均案件时间?最小的结果矩形区域?
-
这里有一个类似的问题:stackoverflow.com/questions/1726632/…
-
是的...这就是我要找的...
-
对于满足要求的any矩形,可以从第一行开始,直到找到1,然后尝试下一行,直到找到另一个1,然后继续尝试第一行的剩余元素......同时递减 k 并依次耗尽每一行。这样,您肯定会得到一个矩形 :-) 但我无法说这是 best 方法 - 这取决于“最佳”的衡量标准!我显然也在考虑矩阵类型的操作(那里只熟悉 Ruby 和 Python)。