给定一个n乘n的零和1矩阵,则在线性时间内找到最大的充满1的子矩阵。有人告诉我,存在一个O(n)时间复杂度的解决方案。如果X n矩阵中有n ^
2个元素,那么线性解如何存在?
您无法及时搜索n x n
矩阵n
。反例:零矩阵,其中单个元素设置为1。您必须检查每个元素以查找该元素在哪里,因此时间必须至少为O(n^2)
。
现在,如果您说矩阵有N
=
n^2
项,并且只考虑形成连续块的子矩阵,那么您应该能够通过斜对角地穿过矩阵,找到最大的子矩阵,并随时跟踪每个矩形。通常O(sqrt(N))
,您最多可以同时激活多个矩形,并且需要搜索它们以找出哪个矩形最大,因此您应该能够及时执行此O(N^(3/2) * log(N))
操作。
如果您可以选择任意行和列来形成子矩阵,那么我看不到任何明显的多项式时间算法。
本文对BFS法在无权有向图中寻找单源最短路径的方法进行了改进,并在O(n+m)时间内解决了上述问题。其中N是顶点数,M是边数 我曾想过以下几点: 将边缘权重更改为1和2。然后在长度为2的路径中创建虚拟顶点以将这些边转换为权重为1的边。但这会给出错误的答案。 在更一般的情况下,当边权值在线性时间内介于0和MAX之间时,如何在有向图中找到单源最短路径。(MAX为最大边缘权重)
我用直方图解决方案编写了这段代码,但用户将输入其矩阵,而不是在代码上输入矩阵。现在看看我做错了什么,除了柱状图的数学之外,一切似乎都正常。我做错了什么? 用户将输入行和列,然后一个接一个地输入矩阵中的每个值。然后代码将显示矩阵并计算所有1的最大大小矩形二进制子矩阵。
给定一个数组,我应该在线性时间内计算以下和: 我最天真的实现是O(n3): 我不知道该怎么办。我尝试了很多算法,但它们最多只能是O(n*log(n)),但我应该在线性时间内解决它。还有,我不明白,有没有一种数学方法可以只看一个数组,然后告诉上面的和的结果?
我遇到了一个关于图形的问题。让我们定义一个rake图。 当满足某些条件时,n顶点图是耙子: 图中有一个度为1的顶点。 此顶点连接到2度的顶点。 该第二顶点连接到阶数为n-2的另一顶点。其他顶点可以相互连接,也可以不相互连接 有人给了我一个n顶点图的邻接矩阵。我的任务是检查由给定矩阵表示的图是否是“rake”。问题是这必须在线性时间内完成。 我什么都试过了。当你有一个邻接列表时,这很容易做到,但是在
经过仔细的研究和思考,我决定发布这个问题,这是我今天早些时候提出的上一个问题的“续集”。 我做了一个算法,可以找到ArrayList的中值,基本上我所做的就是创建一个临时ArrayList,然后使用集合。在那个ArrayList上,我可以很容易地得到中值。问题是,对于较大的文件来说需要花费太长的时间,我正在尝试(运气不佳)找到一种算法的实现,以获得未排序数组(或ArrayList)的中值。 从我在
给定一个数组< code>a[0..< code>0之间的整数的N-1] 例: 输入 预期输出:
我在研究空间日期时遇到了一个问题。我有一个包含列的表:对象id及其坐标(纬度和经度,数据类型是几何体)。我需要找到一公里内最大的一组点。我怎么能这么做?
给定一个2维正整数数组,求和最大的HxW子矩形。矩形的总和是该矩形中所有元素的总和。 输入:具有正元素的二维数组NxN子矩形的HxW大小 输出:HxW大小的子矩阵,其元素的总和最大。 我已经使用蛮力方法解决了这个问题,但是,我现在正在寻找一个具有更好复杂性的更好的解决方案(我的蛮力法的复杂性是O(n6))。