是否总是可以在所有维度上订购多维数组?怎么样?

时间:2013-08-05 17:27:28

标签: arrays algorithm sorting multidimensional-array

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

  • 是否可以输入任何数组?
  • 对于任何输入数组,所需的排序是唯一的吗?我刚刚意识到这个问题的答案通常是没有,例如对于方形矩阵。
  • 对于任何尺寸都不同的输入数组,所需的排序是唯一的吗?
  • 生成所需订购的最快算法是什么?

2 个答案:

答案 0 :(得分:3)

  

是否可以输入任何数组?

是的,如果我们将数组视为具有相同数量元素的单维数组,然后对其进行排序,通过将其遍历回原始的n维数组,它将保持排序状态,因为对于每个{ {1}}:适用于所有i1,....,i_k,...,i_m

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))快得多,但我没有证明这个说法,所以这可能是错的。

答案 1 :(得分:1)

让我详细说明Alptigin Jalayr的想法。

假设我们已对行进行排序,因此对于以下数据,我们有a <= bc <= d

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

a大于c时,即c <a,那么从c < b开始交换它们就会a <= b,从a <=d开始b <= d(如果b > d,我们也会交换bd。总之,首先对行进行排序然后对列进行排序可以为您提供所需的矩阵。