Arrays 算法:如何对具有空间约束的矩阵元素进行排序

Arrays 算法:如何对具有空间约束的矩阵元素进行排序,arrays,algorithm,sorting,Arrays,Algorithm,Sorting,我正试图根据给定的约束条件来理解解决这一问题的最佳方法。我们有一个数字矩阵,其中每一行都被排序。我们的结果应该按排序顺序列出所有这些元素 例如: Input: 20 40 80 5 60 90 45 50 55 output: 5 20 40 45 50 55 60 80 90 限制:一次只能容纳1行 可能的解决方案: 1) 使用数组,将所有元素放入数组并对其排序->o(n)空间用于数组,o(n log n)时间用于排序。但这使用了额外的内存,因此约束实际上

我正试图根据给定的约束条件来理解解决这一问题的最佳方法。我们有一个数字矩阵,其中每一行都被排序。我们的结果应该按排序顺序列出所有这些元素

例如:

Input:  
20  40  80  
5   60  90  
45  50  55     
output:
5 20 40 45 50 55 60 80 90
限制:一次只能容纳1行
可能的解决方案:
1) 使用数组,将所有元素放入数组并对其排序->o(n)空间用于数组,o(n log n)时间用于排序。但这使用了额外的内存,因此约束实际上没有得到满足

2) 使用优先级队列。将所有元素放在优先级队列中,然后移除以按排序顺序获取元素。同样,这使用o(n)空间,但我们有更好的时间复杂度,即o(logn)


我无法理解这样一个事实,即我们如何在给定的约束条件下解决它。如果我遗漏了什么,请有人告诉我。使用给定的约束条件似乎很难解决此问题。

使用优先级队列。此队列的大小应为您拥有的行的大小。 然后,首先从每行插入第一个元素。 其次,从优先级队列中检索最小值,然后从刚检索到的元素所在的行插入一个新元素。 第三,继续这样做,你会得到你的结果

不过,这确实有一个警告。您的约束是在列的大小中保留空格。这里我使用行大小的空间。但我认为这是公平的


考虑一下,如果您有2列和1M行,那么使用大小为2的数组将毫无帮助。

使用优先级队列。此队列的大小应为您拥有的行的大小。 然后,首先从每行插入第一个元素。 其次,从优先级队列中检索最小值,然后从刚检索到的元素所在的行插入一个新元素。 第三,继续这样做,你会得到你的结果

不过,这确实有一个警告。您的约束是在列的大小中保留空格。这里我使用行大小的空间。但我认为这是公平的


考虑一下,如果您有2列和1M行,那么使用大小为2的数组将毫无帮助。

使用优先级队列。此队列的大小应为您拥有的行的大小。 然后,首先从每行插入第一个元素。 其次,从优先级队列中检索最小值,然后从刚检索到的元素所在的行插入一个新元素。 第三,继续这样做,你会得到你的结果

不过,这确实有一个警告。您的约束是在列的大小中保留空格。这里我使用行大小的空间。但我认为这是公平的


考虑一下,如果您有2列和1M行,那么使用大小为2的数组将毫无帮助。

使用优先级队列。此队列的大小应为您拥有的行的大小。 然后,首先从每行插入第一个元素。 其次,从优先级队列中检索最小值,然后从刚检索到的元素所在的行插入一个新元素。 第三,继续这样做,你会得到你的结果

不过,这确实有一个警告。您的约束是在列的大小中保留空格。这里我使用行大小的空间。但我认为这是公平的



试想一下,如果您有2列和1米行,使用大小为2的数组将毫无帮助。

时间有限制吗?什么是“一次只能容纳1行”?我不能一直在两排之间切换?因为如果可以的话,你可以在O(nk)中这样做,其中n是矩阵中的条目数,k是行数。没有提到时间,但特别提到了空间。你可以有额外的内存一次放置一行,并且可以在行之间切换。但是我假设每一行被排序的事实应该被用于优化这个解决方案。如果我们对列而不是行使用额外的内存,这可以吗?时间有限制吗?什么是“一次只允许保存一行”?我不能一直在两排之间切换?因为如果可以的话,你可以在O(nk)中这样做,其中n是矩阵中的条目数,k是行数。没有提到时间,但特别提到了空间。你可以有额外的内存一次放置一行,并且可以在行之间切换。但是我假设每一行被排序的事实应该被用于优化这个解决方案。如果我们对列而不是行使用额外的内存,这可以吗?时间有限制吗?什么是“一次只允许保存一行”?我不能一直在两排之间切换?因为如果可以的话,你可以在O(nk)中这样做,其中n是矩阵中的条目数,k是行数。没有提到时间,但特别提到了空间。你可以有额外的内存一次放置一行,并且可以在行之间切换。但是我假设每一行被排序的事实应该被用于优化这个解决方案。如果我们对列而不是行使用额外的内存,这可以吗?时间有限制吗?什么是“一次只允许保存一行”?我不能一直在两排之间切换?因为如果可以的话,你可以在O(nk)中这样做,其中n是矩阵中的条目数,k是行数。没有提到时间,但特别提到了空间。你可以有额外的内存一次放置一行,并且可以在行之间切换。但是我假设每一行都被排序的事实应该被用于优化这个解决方案。如果我们将额外的内存用于列而不是行,这样可以吗?BufBills我确实理解你的解决方案。我花了一些时间才理解你说的话,但这仍然没有解决制约因素。我同意,如果我们有100万行,那么使用size2数组将不会有帮助。我还在想我们是否有更好的解决办法。你的解决方案显然比我在空格中特别列出的要好