【问题标题】:Is it always possible to order a multi-dimensional array in all dimensions? How?是否总是可以订购所有维度的多维数组?如何?
【发布时间】:2013-08-06 12:10:53
【问题描述】:

假设,我有一个n 维整数数组(n=1 是向量,n=2 是矩形矩阵,n=3 是平行六面体等)。我需要对数组的元素重新排序,以便每一行、每一列等中的元素都处于非递减顺序。

  • 任何输入数组都可以吗?
  • 任何输入数组所需的排序是否唯一? 我刚刚意识到这个问题的答案通常是,例如对于方阵。
  • 对于在所有维度上具有不同长度的任何输入数组,所需的排序是否唯一?
  • 产生所需排序的最快算法是什么?

【问题讨论】:

  • 您能否更准确地定义“重新排序”?
  • 那么,对于一个二维整数数组,你会想要右下角的最大整数吗?在我看来,对每一列进行排序,然后每一行都会给你这样一个重新排序。不过,我确信有一种更快的方法。
  • @ZiyaoWei “重新排序”的意思是“重新排列”,“放置相同的元素是(可能)不同的顺序”。换句话说,结果数组必须包含相同的整数,具有相同的多重性(如果一个整数在输入数组的不同位置多次出现),但可能在不同的位置(无、一个、部分或全部元素的指数可能会改变)。
  • @AlptiginJalayr 是的,最大整数(或者,如果最大整数有多个副本,则其中一个)必须在矩阵的右下角(或者,对于一般多维数组,在所有索引都有其最大可能值的位置)。
  • @ZiyaoWei 我想知道,你在“重新排序”这个词中看到了什么歧义?

标签: arrays algorithm sorting multidimensional-array


【解决方案1】:

任何输入数组都可以吗?

是的,如果我们将数组视为具有相同数量元素的单维数组,然后对其进行排序,通过将其遍历回原始 n 维数组,它仍然是排序的,因为对于每个 @ 987654321@:所有i_k < i_k'

i_1 + n1*i_2 + n2^2*i_3 + .... (n_k-1)^(k-1)(i_k) + ... < i_1 + n1*i_2 + n2^2*i_3 + .... (n_k-1)^(k-1)(i_k') + ...
Thus (the array is ordered):
arr[i_1 + n1*i_2 + n2^2*i_3 + .... (n_k-1)^(k-1)(i_k) + ...] < arr[ i_1 + n1*i_2 + n2^2*i_3 + .... (n_k-1)^(k-1)(i_k') + ...]
Thus (back to original array):
arr[i_1][i_2]...[i_k]... < arr[i_1][i_2]...[i_k']...

关于第二个问题:

对于任何具有不同的输入数组,所需的排序是否唯一? 各个维度的长度?

没有:

1 1          1 3
3 4          1 4
5 6          5 6

产生所需排序的最快算法是什么?

已经提出了一种解决方案:将其视为一个很大的长数组并对其进行排序。 复杂度为O(n_1*n_2*...*n_m*log(n_1*n_2*...*n_m))
我的直觉说,如果你能做得更快,你可以比O(nlogn) 更快地发泄,但我没有证据证明这种说法,所以它可能是错误的。

【讨论】:

  • 我认为完全排序没有必要。
  • @lcn 这可能是多余的,我的直觉说不是——但我完全不确定。无论如何,答案的重点是表明它可以针对所有输入案例通过算法完成,如果存在的话,我也希望看到更优化的算法。
【解决方案2】:

让我详细介绍一下 Alptigin Jalayr 的想法。

假设我们对行进行了排序,那么对于以下数据,我们有a &lt;= bc &lt;= d

     .       .
..., a, ..., b, ...
     .       .
..., c, ..., d, ...
     .       .

a 大于c,即c &lt;a,那么它们的交换给我们c &lt; b,因为a &lt;= b,和a &lt;=d,因为b &lt;= d(如果b &gt; d,我们交换@ 987654332@ 和 d 以及)。总之,先对行进行排序,然后再对列进行排序可以为您提供所需的矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多