Hallo! Der heutige Vortrag wird ein wenig anders sein als der Rest. Der Unterschied besteht darin, dass es nur indirekt mit Java zusammenhängt. Dieses Thema ist jedoch für jeden Programmierer sehr wichtig. Wir werden über Algorithmen sprechen . Was ist ein Algorithmus? Vereinfacht ausgedrückt handelt es sich dabei um eine bestimmte Abfolge von Aktionen, die ausgeführt werden müssen, um das gewünschte Ergebnis zu erzielen . Im Alltag nutzen wir oft Algorithmen. Sie stehen zum Beispiel jeden Morgen vor der Aufgabe, zur Schule oder zur Arbeit zu kommen und gleichzeitig zu sein:
- Angezogen
- Sauber
- Gut genährt
- Wachen Sie mit einem Wecker auf.
- Duschen, Gesicht waschen.
- Bereiten Sie Frühstück vor, kochen Sie Kaffee/Tee.
- Essen.
- Wenn Sie Ihre Kleidung seit dem Abend nicht mehr gebügelt haben, bügeln Sie sie.
- Sich anziehen.
- Das Haus verlassen.
- Kaufen oder laden Sie im Internet die Ausgabe „Wörterbuch der russischen Personennamen“ von 1966 herunter.
- Finden Sie jeden Namen auf unserer Liste in diesem Wörterbuch.
- Schreiben Sie auf ein Blatt Papier, auf welcher Seite des Wörterbuchs der Name steht.
- Ordnen Sie die Namen anhand der Notizen auf einem Blatt Papier.
for
, die diese Aufgabe ausführt
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Wie komplex ist der geschriebene Algorithmus? Linear, O(N). Die Anzahl der Aktionen, die das Programm ausführen muss, hängt davon ab, wie viele Zahlen genau an das Programm übergeben wurden. Wenn das Array 100 Zahlen enthält, gibt es 100 Aktionen (Ausgaben auf dem Bildschirm). Wenn das Array 10.000 Zahlen enthält, müssen 10.000 Aktionen ausgeführt werden. Kann unser Algorithmus verbessert werden? Nein. In jedem Fall müssen wir N Durchgänge durch das Array durchführen und N Ausgaben an die Konsole durchführen. Schauen wir uns ein anderes Beispiel an.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Wir haben ein leeres LinkedList
, in das wir mehrere Zahlen einfügen. Wir müssen die Komplexität des Algorithmus zum Einfügen einer einzelnen Zahl in LinkedList
unser Beispiel abschätzen und wie sie von der Anzahl der Elemente in der Liste abhängt. Die Antwort ist O(1) – konstante Komplexität . Warum? Bitte beachten Sie: Jedes Mal fügen wir am Anfang der Liste eine Nummer ein. Darüber hinaus werden beim Einfügen von Zahlen in LinkedList
Elemente, wie Sie sich erinnern, diese nirgendwo verschoben – Links werden neu definiert (wenn Sie plötzlich vergessen haben, wie LinkedList funktioniert, schauen Sie sich eine unserer alten Vorlesungen an ). Wenn nun die erste Zahl in unserer Liste die Zahl ist х
und wir die Zahl y am Anfang der Liste einfügen, brauchen wir nur noch:
x.previous = y;
y.previous = null;
y.next = x;
Für diese Neudefinition der Referenz spielt es für uns keine Rolle, wie viele Zahlen es jetzt gibtLinkedList
– mindestens eine, mindestens eine Milliarde. Die Komplexität des Algorithmus wird konstant sein – O(1).
GO TO FULL VERSION