Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当给定每行和每列的最大元素时,计算二维数组的最大元素,单位为O(logn)_Java_Algorithm_Time Complexity - Fatal编程技术网

Java 当给定每行和每列的最大元素时,计算二维数组的最大元素,单位为O(logn)

Java 当给定每行和每列的最大元素时,计算二维数组的最大元素,单位为O(logn),java,algorithm,time-complexity,Java,Algorithm,Time Complexity,我有一个二维数组,大小nxn。给出了每行和每列的最大元素。例如,如果n=4: int[][] arr = {{2, 3, 10, 1} {9, 2, 8, 12}, {5, 18, 2, 10}, {7, 9, 3, 5}} 我还有每行的最大值是10,12,18,9,每列的最大值是9,18,10,12。所以我想在O(logn)中找到整个数组的最大元素,即18。 有解决此问题的算法吗?默认情况下,数组中的

我有一个二维数组,大小
nxn
。给出了每行和每列的最大元素。例如,如果n=4:

int[][] arr = {{2, 3, 10, 1} 
               {9, 2, 8, 12},
               {5, 18, 2, 10},
               {7, 9, 3, 5}}
我还有每行的最大值是10,12,18,9,每列的最大值是9,18,10,12。所以我想在
O(logn)
中找到整个数组的最大元素,即18。
有解决此问题的算法吗?

默认情况下,数组中的最大元素是其行和列的最大值。我们知道任何一个列表都不会包含较大的数字,因为它是最大的元素,所以在两个列表中它都是最大的

因此,我们只需要在行最大值列表中找到最大值(或者列最大值,您不需要两者)

如果最大值列表未排序,则可以在
O(n)
中找到最大值;如果已排序,则可以在
O(1)
中找到最大值。我无法想象在没有更多数据的情况下,如何在
O(logn)
中找到最大元素


如果在时间复杂度中考虑<强> n<强>数组中的元素个数而不是单侧的数目,则可以得到一个更接近的-我们可以在O(qRT(n))中得到解,而不是O(Logn)。

< P>数组中的最大元素默认为行和列的最大值。我们知道任何一个列表都不会包含较大的数字,因为它是最大的元素,所以在两个列表中它都是最大的

因此,我们只需要在行最大值列表中找到最大值(或者列最大值,您不需要两者)

如果最大值列表未排序,则可以在
O(n)
中找到最大值;如果已排序,则可以在
O(1)
中找到最大值。我无法想象在没有更多数据的情况下,如何在
O(logn)
中找到最大元素


如果在时间复杂度中考虑<强> n<强>数组中的元素个数,而不是单侧的数目,则可以得到一个更接近的-我们可以在O(qRT(n))中得到解,而不是O(Logn)。< /P> < P>给出的4×4示例表明行/列极大值是未排序的(并且遵循原始行/列排序)。因此,所有n行最大值(或列最大值,如果您愿意使用它们)都必须进行检查,采取n个步骤。小于n,您可能会跳过实际最大值


因此,它可以用O(n)来完成。

给出的4*4示例显示行/列最大值未排序(并遵循原始行/列排序)。因此,所有n行最大值(或列最大值,如果您愿意使用它们)都必须进行检查,采取n个步骤。小于n,您可能会跳过实际最大值


所以它可以用O(n)来完成,而不是更少。

如果我遗漏了什么,请纠正我,但是从行或列的最大值中找到最大值不是一个
O(n)
操作吗?或者你在问别的什么?这些最大值是给定的。所以你不必计算它们。换句话说,你有8个元素(最大值)是上面的,你必须找到其中的最大值。我在下面尽我所能回答-如果你有关于最大值列表的任何额外信息,也许我可以改进算法。如果我遗漏了什么,请纠正我,但是,从行或列的最大值中找到最大值难道不是一个
O(n)
操作吗?或者你在问别的什么?这些最大值是给定的。所以你不必计算它们。换句话说,你有8个元素(最大值)是上面的,你必须找到其中的最大值。我在下面尽我所能回答-如果你有任何关于最大值列表的额外信息,也许我可以改进算法。我同意这一点,并假设最大值的1D数组是完全未排序的,我认为我们能做的最好的方法是合并排序,它的成本是
O(N*lgN)
。我们只需要行最大值的最大值——因此,我们只需进行多达N次的交换,就可以得到max元素。时间复杂度是基本操作和数据输入的函数。在本例中,我们有nxn元素。因此,如果我们对上面的数组(n=4,n^n=16)进行计算,它将是log16=log(2^4)=4log2=4比较。我说得对吗?4x4也是这样,因为log(16)=4。但是如果你有6X6,log(36)是5.17,而不是6。对于10x10,你将得到日志(100)=6.64,而你需要10来得到最大值。顺便说一下,“DimitrisMpl,如果你觉得我的答案有帮助,你会考虑接受它吗?”只需点击它旁边的灰色复选标记,使其变为绿色。我同意这一点,并且假设maxima的1D数组完全未排序,我认为我们能做的最好是合并排序,它的成本
O(N*lgN)
。我们只需要行最大值的最大值-因此,我们可以处理所有行最大值的最大值-我们只需进行多达n次的交换即可获得最大值元素。时间复杂度是基本操作和数据输入的函数。在本例中,我们有nxn元素。因此,如果我们对上面的数组(n=4,n^n=16)进行计算,它将是log16=log(2^4)=4log2=4比较。我说得对吗?4x4也是这样,因为log(16)=4。但是如果你有6X6,log(36)是5.17,而不是6。对于10x10,你将得到日志(100)=6.64,而你需要10来得到最大值。顺便说一下,“DimitrisMpl,如果你觉得我的答案有帮助,你会考虑接受它吗?”只需单击旁边的灰色复选标记,使其变为绿色。