Algorithmusübung 5

Rotate Array

Erläuterung

Wenn zwei Argumente übergeben werden, ein Array vom Typ Integer und eine Ganzzahl N (Anzahl der Umdrehungen), werden die Elemente des Arrays N-mal verschoben (minus nach links plus nach rechts). Machen wir es zu einem gedrehten Array.

Beispiel

Angenommen, die folgende Sequenz wird übergeben. Screen Shot 2019-12-18 at 10.24.31.png Wenn die Drehzahl N -1 ist, werden alle Elemente nacheinander nach links verschoben. Screen Shot 2019-12-18 at 10.25.05.png Wenn die Anzahl der Umdrehungen N 2 beträgt, werden alle Elemente zweimal nacheinander nach rechts verschoben. Screen Shot 2019-12-18 at 10.27.40.png

Try It Yourself (Brute Force) Das erste, was mir zu diesem Thema in den Sinn kam, war der Brute-Force-Algorithmus nach der Rotation Links und rechts befinden sich immer zwei Teilarrays. Erstellen Sie also diese beiden Arrays. (Im Fall von N = 2 im Beispiel ist left_sub_array = {9, 40} und right_sub_array = {1, 10, 20, 0, 59, 86, 32, 11}) Dann werden die gedrehten Elemente, die in den linken und rechten Teilarrays gespeichert sind, nacheinander auf das ursprüngliche Array aktualisiert. Wenn N negativ ist, kann die Linksrotation auf den Rechtsrotationsalgorithmus angewendet werden.

Laufzeitkomplexität O (n)

Raumberechnung (Speicherkomplexität) O (n)

Implementierung

Screen Shot 2019-12-18 at 10.54.04.png

TEST Screen Shot 2019-12-18 at 11.29.13.png

OUTPUT Screen Shot 2019-12-18 at 11.30.31.png

Rezension

Um die Reihenfolge der Elemente zu ändern, müssen die Positionen aller Elemente neu angeordnet werden, sodass die Ausführungszeit O (n) die Grenze ist. Der Umfang der räumlichen Berechnung kann jedoch O (1) sein. Das heißt, es wird nur die übergebene Datenstruktur verwendet.

Optimierung: Speicherkomplexität O (n) -> O (1)

  1. Invertieren Sie die Elemente des ursprünglichen Arrays.
  2. Invertieren Sie die Elemente von 0 nach N-1.
  3. Invertieren Sie die Elemente von N nach Länge-1

Beispiel

Angenommen, die gleiche Sequenz wie im vorherigen Beispiel wird übergeben. Die Anzahl der Umdrehungen beträgt N = 2. Screen Shot 2019-12-18 at 11.16.56.png

  1. Invertieren Sie zunächst alle Elemente des ursprünglichen Arrays. Screen Shot 2019-12-18 at 11.18.54.png
  2. Invertieren Sie dann die Elemente von Index 0 zu N-1 (2-1 = 1). Screen Shot 2019-12-18 at 11.20.46.png
  3. Invertieren Sie schließlich die Elemente von N (2) bis zum Ende des Arrays. Screen Shot 2019-12-18 at 11.22.30.png Jetzt kann der Umfang der räumlichen Berechnung mit der Konstanten O (1) optimiert werden.

Implementierung

Screen Shot 2019-12-18 at 11.34.01.png

AUSGABE (gleicher TEST-Code)

Screen Shot 2019-12-18 at 11.35.56.png

Recommended Posts

Algorithmusgymnastik 12
Algorithmusgymnastik 10
Algorithmusgymnastik 3
Algorithmusgymnastik 9
Algorithmusgymnastik 14
Algorithmusgymnastik 2
Algorithmusgymnastik 7
Algorithmus Gymnastik 15
Algorithmus Gymnastik 16
Algorithmusgymnastik 8
Algorithmus Gymnastik 17
Algorithmus Gymnastik 18
Algorithmusgymnastik 11
Algorithmusübung 5
Algorithmusgymnastik 4
Algorithmus Gymnastik 24 Teilmengen
Algorithmus Gymnastik 23 Zusammenführungsintervalle
Algorithmus Gymnastik 20 Duplikate entfernen
Algorithmus Gymnastik 21 LinkedList-Zyklus
Algorithmus Gymnastik 24 Zyklische Sortierung
Algorithmus Gymnastik 19 No-Repeat-Teilzeichenfolge
Algorithmusübung 6
Algorithmus Gymnastik 24 Eine verknüpfte Liste umkehren
Python-Algorithmus
Algorithmusübungen 13
Algorithmus Gymnastik 20 Paar mit Zielsumme
Algorithmusgymnastik 22 Quadrieren eines sortierten Arrays
Algorithmus Gymnastik 24 Mitte der verknüpften Liste
Python-Memorandum (Algorithmus)
Wörterbuch-Lernalgorithmus
String-Suchalgorithmus