Ist es immer möglich, ein mehrdimensionales Array in allen Dimensionen zu bestellen? Wie?

9

Angenommen, ich habe ein n -dimensionales Array von Ganzzahlen (für n=1 ist es ein Vektor, für n=2 ist es eine rechteckige Matrix, für n=3 ist es ein Parallelepiped usw.). Ich muss Elemente des Arrays neu anordnen, so dass Elemente in jeder Zeile, Spalte usw. in einer nicht abnehmenden Reihenfolge sind.

  • Ist es für ein beliebiges Eingabearray möglich?
  • Ist die erforderliche Reihenfolge für jedes Eingabearray eindeutig? Ich habe gerade festgestellt, dass die Antwort für diese Frage im Allgemeinen nein lautet, z. für quadratische Matrizen.
  • Ist die erforderliche Reihenfolge für jedes Eingabearray mit unterschiedlichen Längen in allen Dimensionen eindeutig?
  • Was ist der schnellste Algorithmus, um die erforderliche Reihenfolge zu erstellen?
Լ.Ƭ. 05.08.2013, 17:27
quelle

2 Antworten

3
  

Ist dies für ein beliebiges Eingabe-Array möglich?

Ja, wenn wir das Array als ein einzelnes Dimensionsfeld mit der gleichen Anzahl von Elementen betrachten und es dann sortieren, indem wir es zurück zum ursprünglichen n-dimensionalen Array zurücklegen, bleibt es sortiert, da für jedes i1,....,i_k,...,i_m : für alle i_k < i_k' :

%Vor%

Wie für die zweite Frage:

  

Ist die erforderliche Reihenfolge für ein beliebiges Eingabearray eindeutig?   Längen in allen Dimensionen?

Nein:

%Vor%
  

Was ist der schnellste Algorithmus, um die erforderliche Reihenfolge zu erstellen?

Eine Lösung wird bereits vorgeschlagen: Betrachte es als großes langes Array und sortiere es. Komplexität ist O(n_1*n_2*...*n_m*log(n_1*n_2*...*n_m))
Mein Bauch sagt, wenn du es schneller machen könntest, könntest du schneller als O(nlogn) , aber ich habe keinen Beweis für diese Behauptung, also könnte es falsch sein.

    
amit 05.08.2013 18:03
quelle
1

Lassen Sie mich mehr über die Idee von Alptigin Jalayr sprechen.

Angenommen, wir haben Zeilen sortiert, also haben wir für die folgenden Daten a <= b und c <= d .

%Vor%

Wenn a größer ist als c , dh c <a , dann gibt uns der Tausch uns c < b seit a <= b und a <=d seit b <= d (wenn b > d , tauschen wir% auch co_de% und b ). Mit einem Wort: Wenn Sie zuerst die Zeilen und dann die Spalten sortieren, können Sie die gewünschte Matrix erhalten.

    
lcn 05.08.2013 18:06
quelle