Departement Informatik
Informatikgrundlagen
Daten einlesen und Sortieren
Hans-Joachim Böckenhauer Dennis Komm
Herbst 2021 – 4. November 2021
def primetest3(x):
if x < 2 or (x > 2 and x % 2 == 0):
return False d = 3
while d < x:
if x % d == 0:
return False d += 2
Ein schnellerer Primzahltest
from math import sqrt
def primetest3(x):
if x < 2 or (x > 2 and x % 2 == 0):
return False d = 3
wurzelx = sqrt(x) while d <= wurzelx:
if x % d == 0:
return False d += 2
return True
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 1 / 28
Ein schnellerer Primzahltest
Wie gross ist diesmal die Verbesserung?
Laufzeit «wächst» mit Grösse des Werts von x Laufzeit inO(√
2n) =O(2n/2) =O(1.415n)
Ein schnellerer Primzahltest
Wie gross ist diesmal die Verbesserung?
Was ist die Laufzeit dieses Algorithmus?
Schleife wird√
x/2Mal durchlaufen
Laufzeit «wächst» mit Grösse des Werts von√ x Laufzeit inO(√
2n) =O(2n/2) =O(1.415n)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 2 / 28
Ein schnellerer Primzahltest
Wie gross ist diesmal die Verbesserung?
Was ist die Laufzeit dieses Algorithmus?
Schleife wird√
x/2Mal durchlaufen
Ein schnellerer Primzahltest
Wie gross ist diesmal die Verbesserung?
Was ist die Laufzeit dieses Algorithmus?
Schleife wird√
x/2Mal durchlaufen
Laufzeit «wächst» mit Grösse des Werts von√ x
Laufzeit inO(√
2n) =O(2n/2) =O(1.415n)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 2 / 28
Wie gross ist diesmal die Verbesserung?
Was ist die Laufzeit dieses Algorithmus?
Schleife wird√
x/2Mal durchlaufen
Laufzeit «wächst» mit Grösse des Werts von√ x Laufzeit inO(√
2n) =O(2n/2) =O(1.415n)
Ein schnellerer Primzahltest
5 10 15 20 25 30 35 40 45
0 2 000 000 4 000 000 6 000 000 8 000 000 10 000 000
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 3 / 28
5 10 15 20 25 30 35 40 45 0
2 000 000 4 000 000 6 000 000 8 000 000 10 000 000
2n
Ein schnellerer Primzahltest
5 10 15 20 25 30 35 40 45
0 2 000 000 4 000 000 6 000 000 8 000 000 10 000 000
2n 1.415n
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 3 / 28
Ein schnellerer Primzahltest
Nehmen wir vereinfacht an, unser Computer kann1000Durchläufe der Schleife pro Sekunde durchführen
100 000 000 000 031Durchläufe 1000DurchläufeSekunde
>100 000 000 000Sekunden
>3100Jahre
√100 000 000 000 031Durchläufe 1000DurchläufeSekunde
≈ 10 000 000Durchläufe 1000DurchläufeSekunde
<3Stunden
Selbst wenn der Computer, auf dem das langsamere Programm läuft, 100 Mal schneller ist, braucht er noch 31 Jahre
Ein schnellerer Primzahltest
Nehmen wir vereinfacht an, unser Computer kann1000Durchläufe der Schleife pro Sekunde durchführen; fürx= 100 000 000 000 031bedeutet dies:
. . . d < x . . .
100 000 000 000 031Durchläufe 1000DurchläufeSekunde
>100 000 000 000Sekunden
>3100Jahre
. . . d <= sqrt(x) . . .
√100 000 000 000 031Durchläufe 1000DurchläufeSekunde
≈ 10 000 000Durchläufe 1000DurchläufeSekunde
<3Stunden
Selbst wenn der Computer, auf dem das langsamere Programm läuft, 100 Mal schneller ist, braucht er noch 31 Jahre
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 4 / 28
Ein schnellerer Primzahltest
Nehmen wir vereinfacht an, unser Computer kann1000Durchläufe der Schleife pro Sekunde durchführen; fürx= 100 000 000 000 031bedeutet dies:
. . . d < x . . .
100 000 000 000 031Durchläufe 1000DurchläufeSekunde
>100 000 000 000Sekunden
>3100Jahre
. . . d <= sqrt(x) . . .
√100 000 000 000 031Durchläufe 1000DurchläufeSekunde
≈ 10 000 000Durchläufe 1000DurchläufeSekunde
<3Stunden
Ein schnellerer Primzahltest
Nehmen wir vereinfacht an, unser Computer kann1000Durchläufe der Schleife pro Sekunde durchführen; fürx= 100 000 000 000 031bedeutet dies:
. . . d < x . . .
100 000 000 000 031Durchläufe 1000DurchläufeSekunde
>100 000 000 000Sekunden
>3100Jahre
. . . d <= sqrt(x) . . .
√100 000 000 000 031Durchläufe 1000DurchläufeSekunde
≈ 10 000 000Durchläufe 1000DurchläufeSekunde
<3Stunden
Selbst wenn der Computer, auf dem das langsamere Programm läuft, 100 Mal schneller ist, braucht er noch 31 Jahre
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 4 / 28
Ein schnellerer Primzahltest
Oder andersherum. . .
Angenommen, wir wollen maximal zehn Minuten rechnen
xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 000
√xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 0002
⇐⇒x= 360 000 000 000
Ein schnellerer Primzahltest
Oder andersherum. . .
Angenommen, wir wollen maximal zehn Minuten rechnen
Dann ergeben sich maximal «testbare» Primzahlen in den folgenden Grössenordnungen:
. . . d < x . . . xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 000
. . . d <= sqrt(x) . . .
√xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 0002
⇐⇒x= 360 000 000 000
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 5 / 28
Ein schnellerer Primzahltest
Oder andersherum. . .
Angenommen, wir wollen maximal zehn Minuten rechnen
Dann ergeben sich maximal «testbare» Primzahlen in den folgenden Grössenordnungen:
. . . d < x . . . xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 000
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 0002
⇐⇒x= 360 000 000 000
Ein schnellerer Primzahltest
Oder andersherum. . .
Angenommen, wir wollen maximal zehn Minuten rechnen
Dann ergeben sich maximal «testbare» Primzahlen in den folgenden Grössenordnungen:
. . . d < x . . . xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 000
. . . d <= sqrt(x) . . .
√xDurchläufe
1000DurchläufeSekunde = 600Sekunden
⇐⇒x= 600 0002
⇐⇒x= 360 000 000 000
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 5 / 28
Best- und Worst-Case-Analyse
Welcher Algorithmus ist schneller?
def primetest3(x):
if x < 2 or (x > 2 and x % 2 == 0):
return False d = 3
while d <= sqrt(x):
if x % d == 0:
return False d += 2
return True
def primetest4(x):
if x < 2 or (x > 2 and x % 2 == 0):
return False d = 3
isprime = True while d <= sqrt(x):
if x % d == 0:
isprime = False d += 2
return isprime
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 6 / 28
Best- und Worst-Case-Analyse
Angenommen,xist durch 3 teilbar
Dann ist der linke Algorithmus sehr schnell
ï Schleife wird nach dem ersten Vergleich verlassen
«Early Exit»
Rechter Algorithmus macht ca.1.415n/2Vergleiche Angenommen,xist Primzahl
Best- und Worst-Case-Analyse
Angenommen,xist durch 3 teilbar
Dann ist der linke Algorithmus sehr schnell
ï Schleife wird nach dem ersten Vergleich verlassen
«Early Exit»
Rechter Algorithmus macht ca.1.415n/2Vergleiche
Angenommen,xist Primzahl
Dann machen beide Algorithmen ca.1.415n/2Vergleiche (Natürlich sollte der linke implementiert werden)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 7 / 28
Angenommen,xist durch 3 teilbar
Dann ist der linke Algorithmus sehr schnell
ï Schleife wird nach dem ersten Vergleich verlassen
«Early Exit»
Rechter Algorithmus macht ca.1.415n/2Vergleiche Angenommen,xist Primzahl
Dann machen beide Algorithmen ca.1.415n/2Vergleiche (Natürlich sollte der linke implementiert werden)
Was kann man sonst noch machen?
Jede Zahl zwischen 1undxtesten
Primzahltest
Jede Zahl zwischen 1undxtesten
Jede zweite Zahl zwischen 1undxtesten
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 8 / 28
Jede Zahl zwischen 1undxtesten
Jede zweite Zahl zwischen 1undxtesten
Jede zweite Zahl zwischen 1und√
xtesten
Primzahltest
Randomisierter Monte-Carlo-
Algorithmus
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 8 / 28
Randomisierter Monte-Carlo-
Algorithmus
Polynomieller
AKS-Algorithmus
Listen
Weiterführende Konzepte
2-dimensionale Listen
Bislang beinhalten Listen Zahlen oder Zeichen
Liste kann auch Listen beinhalten
Solche2-dimensionalen Listen speichern z. B. Tabellen und Matrizen
M =
2 0 3 0 6 3 9 5 1 1 0 0 7 2 7 3 9 5 8 0 8 2 0 3 2 1 6 5 9 6
M = [ [2, 0, 3, 0, 6], [3, 9, 5, 1, 1], [0, 0, 7, 2, 7], [3, 9, 5, 8, 0], [8, 2, 0, 3, 2], [1, 6, 5, 9, 6] ]
2-dimensionale Listen
Bislang beinhalten Listen Zahlen oder Zeichen Liste kann auch Listen beinhalten
Solche2-dimensionalen Listen speichern z. B. Tabellen und Matrizen
M =
2 0 3 0 6 3 9 5 1 1 0 0 7 2 7 3 9 5 8 0 8 2 0 3 2 1 6 5 9 6
M = [ [2, 0, 3, 0, 6], [3, 9, 5, 1, 1], [0, 0, 7, 2, 7], [3, 9, 5, 8, 0], [8, 2, 0, 3, 2], [1, 6, 5, 9, 6] ]
Zugriff aufi-te Zeile undj-te Spalte mit M[i][j]
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 9 / 28
2-dimensionale Listen
Bislang beinhalten Listen Zahlen oder Zeichen Liste kann auch Listen beinhalten
Solche2-dimensionalen Listen speichern z. B. Tabellen und Matrizen
M =
2 0 3 0 6 3 9 5 1 1 0 0 7 2 7 3 9 5 8 0 8 2 0 3 2 1 6 5 9 6
M = [ [2, 0, 3, 0, 6], [3, 9, 5, 1, 1], [0, 0, 7, 2, 7], [3, 9, 5, 8, 0], [8, 2, 0, 3, 2], [1, 6, 5, 9, 6] ]
2-dimensionale Listen
Bislang beinhalten Listen Zahlen oder Zeichen Liste kann auch Listen beinhalten
Solche2-dimensionalen Listen speichern z. B. Tabellen und Matrizen
M =
2 0 3 0 6 3 9 5 1 1 0 0 7 2 7 3 9 5 8 0 8 2 0 3 2 1 6 5 9 6
M = [ [2, 0, 3, 0, 6], [3, 9, 5, 1, 1], [0, 0, 7, 2, 7], [3, 9, 5, 8, 0], [8, 2, 0, 3, 2], [1, 6, 5, 9, 6] ]
Zugriff aufi-te Zeile undj-te Spalte mit M[i][j]
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 9 / 28
Daten einlesen
Beispiel: Matrix in Datei gegeben Inhalt der Datei ist ein Text
Matrix zeilenweise abgespeichert
Einträge in jeder Zeile mit Kommata getrennt Einträge sollen als Zahlen interpretiert werden
Drei Schritte
1. Datei Zeile für Zeile einlesen
2. Einträge aus den Zeilen extrahieren (Trennsymbol: Komma) 3. Jeden Eintrag in Zahl konvertieren
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 10 / 28
Beispiel: Matrix in Datei gegeben Inhalt der Datei ist ein Text
Matrix zeilenweise abgespeichert
Einträge in jeder Zeile mit Kommata getrennt Einträge sollen als Zahlen interpretiert werden Drei Schritte
1. Datei Zeile für Zeile einlesen
2. Einträge aus den Zeilen extrahieren (Trennsymbol: Komma)
Daten einlesen
1. Datei Zeile für Zeile einlesen
with open("daten.txt") as file:
lines = file.read().splitlines()
Dateidaten.txtist für den nachfolgenden Anweisungsblock geöffnet Zugreifbar unter dem Namenfile
lines = file.read()speichert den gesamten Text ausdaten.txtin der Variablenlines
lines = file.read().splitlines()speichert die einzelnen Zeilen von daten.txtals Einträge der Listelines
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 11 / 28
Daten einlesen
1. Datei Zeile für Zeile einlesen
with open("daten.txt") as file:
Dateidaten.txtist für den nachfolgenden Anweisungsblock geöffnet Zugreifbar unter dem Namenfile
lines = file.read()speichert den gesamten Text ausdaten.txtin der Variablenlines
lines = file.read().splitlines()speichert die einzelnen Zeilen von daten.txtals Einträge der Listelines
Daten einlesen
1. Datei Zeile für Zeile einlesen
with open("daten.txt") as file:
lines = file.read().splitlines()
Dateidaten.txtist für den nachfolgenden Anweisungsblock geöffnet Zugreifbar unter dem Namenfile
lines = file.read()speichert den gesamten Text ausdaten.txtin der Variablenlines
lines = file.read().splitlines()speichert die einzelnen Zeilen von daten.txtals Einträge der Listelines
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 11 / 28
1. Datei Zeile für Zeile einlesen
with open("daten.txt") as file:
lines = file.read().splitlines()
Dateidaten.txtist für den nachfolgenden Anweisungsblock geöffnet Zugreifbar unter dem Namenfile
lines = file.read()speichert den gesamten Text ausdaten.txtin der Variablenlines
lines = file.read().splitlines()speichert die einzelnen Zeilen von daten.txtals Einträge der Listelines
Daten einlesen: Beispiel
1. Datei Zeile für Zeile einlesen
with open("daten.txt") as file:
lines = file.read().splitlines()
daten.txt 2, 0, 3, 0, 6 3, 9, 5, 1, 1 0, 0, 7, 2, 7 3, 9, 5, 8, 0 8, 2, 0, 3, 2 1, 6, 5, 9, 6
lines = [ "2, 0, 3, 0, 6",
"3, 9, 5, 1, 1",
"0, 0, 7, 2, 7",
"3, 9, 5, 8, 0",
"8, 2, 0, 3, 2",
"1, 6, 5, 9, 6" ]
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 12 / 28
Daten einlesen
2. Einträge aus erster Zeile extrahieren (Trennsymbol: Komma)
tmp = lines[0].split(",")
"3, 9, 5, 8, 0",
"8, 2, 0, 3, 2",
"1, 6, 5, 9, 6" ]
Daten einlesen
2. Einträge aus erster Zeile extrahieren (Trennsymbol: Komma)
tmp = lines[0].split(",")
lines = [ "2, 0, 3, 0, 6",
"3, 9, 5, 1, 1",
"0, 0, 7, 2, 7",
"3, 9, 5, 8, 0",
"8, 2, 0, 3, 2",
"1, 6, 5, 9, 6" ]
tmp = ["2", "0", "3", "0", "6"]
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 13 / 28
Daten einlesen
3. Jeden Eintrag in Zahl konvertieren
data = [0] * len(tmp)
for i in range(0, len(tmp)):
data[i] = int(tmp[i])
Daten einlesen
3. Jeden Eintrag in Zahl konvertieren
data = [0] * len(tmp)
for i in range(0, len(tmp)):
data[i] = int(tmp[i])
tmp = ["2", "0", "3", "0", "6"] data = [2, 0, 3, 0, 6]
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 14 / 28
def readfile(filename):
# Datei Zeile für Zeile einlesen with open(filename) as file:
lines = file.read().splitlines()
# Einträge aus erster Zeile extrahieren (Trennsymbol: Komma) tmp = lines[0].split(",")
# Jeden Eintrag in Zahl konvertieren data = [0] * len(tmp)
for i in range(0, len(tmp)):
data[i] = int(tmp[i]) return data
Aufgabe – Daten einlesen
Erweitern Sie die Funktion, sodass alle Zeilen der Datei gelesen und konvertiert werden
der Inhalt in einer 2-dimensionalen Liste gespeichert wird
def readfile(filename):
with open(filename) as file:
lines = file.read().splitlines() tmp = lines[0].split(",")
data = [0] * len(tmp) for i in range(0, len(tmp)):
data[i] = int(tmp[i]) return data
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 16 / 28
Daten einlesen
def readfile2(filename):
# Datei Zeile für Zeile einlesen with open(filename) as file:
lines = file.read().splitlines() data = []
# Alle Zeilen nacheinander verarbeiten for i in range(0, len(lines)):
tmp = lines[i].split(",") dataline = [0] * len(tmp) for j in range(0, len(tmp)):
dataline[j] = int(tmp[j]) data.append(dataline) return data
Daten einlesen
def readfile2(filename):
# Datei Zeile für Zeile einlesen with open(filename) as file:
lines = file.read().splitlines() data = []
# Alle Zeilen nacheinander verarbeiten for i in range(0, len(lines)):
tmp = lines[i].split(",") dataline = [0] * len(tmp) for j in range(0, len(tmp)):
dataline[j] = int(tmp[j]) data.append(dataline) return data
Oft sind Daten als solchecsv-Dateien (Comma Separated Values) gegeben
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 17 / 28
Sortieren und Suchen
Daten suchen undsortierensind zwei der grundlegendsten Aufgaben von Informatikerinnen und Informatikern
Standardwerk dreht sich nur um diese Themen Gegeben seienn positive ganze Zahlen
GenauerunsortierteListedatamitn = len(data) Wir betrachtennals Eingabelänge
Zahlen können mehrfach auftauchen
Sortieremit möglichst kleiner Zeitkomplexität
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 18 / 28
Sortieren und Suchen
Daten suchen undsortierensind zwei der grundlegendsten Aufgaben von Informatikerinnen und Informatikern
Standardwerk dreht sich nur um diese Themen
Wir betrachtennals Eingabelänge Zahlen können mehrfach auftauchen
Sortieremit möglichst kleiner Zeitkomplexität
Sortieren und Suchen
Daten suchen undsortierensind zwei der grundlegendsten Aufgaben von Informatikerinnen und Informatikern
Standardwerk dreht sich nur um diese Themen Gegeben seienn positive ganze Zahlen
GenauerunsortierteListedatamitn = len(data) Wir betrachtenn als Eingabelänge
Zahlen können mehrfach auftauchen
Sortieremit möglichst kleiner Zeitkomplexität
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 18 / 28
Bubblesort
5
1
1
5 4 3
4
5 3 4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
5 1 4 3
Bubblesort
5
1
1
5 4 3
4
5 3 4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 5 4 3
Bubblesort
5
1
1
5
4 3
4
5 3 4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 5 4 3
Bubblesort
5
1
1 5
4
3 4
5
3 4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 4 5 3
Bubblesort
5
1
1 5
4
3 4
5
3 4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 4 3 5
Bubblesort
5
1
1 5
4
3 4 5
3
4 3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 4 3 5
Bubblesort
5
1
1 5
4
3 4 5
3
4 3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 4 3 5
Bubblesort
5
1
1 5
4
3 4 5
3
4 3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 3 4 5
Bubblesort
5
1
1 5 4
3
4 5 3
4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 3 4 5
Bubblesort
5
1
1 5 4
3
4 5 3
4
3
5
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 19 / 28
Bubblesort
1 3 4 5
Bubblesort
Idee
Sortieren durch wiederholtes Finden des Maximums
Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1
Finde Maximum und schiebe es an die letzte Position Vergleiche hierzu iterativ alle benachbarten Elemente
Maximum wandert wie Luftblase durch Liste an letzte Position Wiederholen mit Bereich0, . . . , n−2
Fahre fort, bisdatasortiert ist
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 20 / 28
Bubblesort
Idee
Sortieren durch wiederholtes Finden des Maximums Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1
Maximum wandert wie Luftblase durch Liste an letzte Position Wiederholen mit Bereich0, . . . , n−2
Fahre fort, bisdatasortiert ist
Bubblesort
Idee
Sortieren durch wiederholtes Finden des Maximums Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1 Finde Maximum und schiebe es an die letzte Position
Vergleiche hierzu iterativ alle benachbarten Elemente
Maximum wandert wie Luftblase durch Liste an letzte Position Wiederholen mit Bereich0, . . . , n−2
Fahre fort, bisdatasortiert ist
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 20 / 28
Bubblesort
Idee
Sortieren durch wiederholtes Finden des Maximums Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1 Finde Maximum und schiebe es an die letzte Position
Vergleiche hierzu iterativ alle benachbarten Elemente
Maximum wandert wie Luftblase durch Liste an letzte Position
Bubblesort
Idee
Sortieren durch wiederholtes Finden des Maximums Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1 Finde Maximum und schiebe es an die letzte Position
Vergleiche hierzu iterativ alle benachbarten Elemente
Maximum wandert wie Luftblase durch Liste an letzte Position Wiederholen mit Bereich0, . . . , n−2
Fahre fort, bisdatasortiert ist
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 20 / 28
Idee
Sortieren durch wiederholtes Finden des Maximums Ziel
ListedatamitnElementen sortieren, also Bereich0, . . . , n−1 Finde Maximum und schiebe es an die letzte Position
Vergleiche hierzu iterativ alle benachbarten Elemente
Maximum wandert wie Luftblase durch Liste an letzte Position Wiederholen mit Bereich0, . . . , n−2
Aufgabe – Eine Bubble-Sequenz
Implementieren Sie eine Bubble-Sequenz Laufe einmal durchdata
Vergleiche jeweils benachbarte Paare Vertausche, wenn das erste Element grösser ist
Maximum «bubblet» nach rechts
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 21 / 28
Eine Bubble-Sequenz in Python
data = [6, 22, 61, 1, 89, 31, 9, 10, 76]
n = len(data)
for i in range(0, n-1):
if data[i] > data[i+1]:
tmp = data[i]
data[i] = data[i+1]
data[i+1] = tmp
Aufgabe – Bubblesort
Implementieren Sie den vollständigen Algorithmus Iteriere Bubble-Sequenzen
Nachk-ter Sequenz sind die letztenk Elemente vondatasortiert
Bubble-Sequenzen werden mit jeder Iteration kürzer
Verwende hierzu eine äussere Schleife
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 23 / 28
def bubblesort(data):
n = len(data)
for d in range(n, 1, -1):
for i in range(0, d-1):
if data[i] > data[i+1]:
tmp = data[i]
data[i] = data[i+1]
data[i+1] = tmp return data
print(bubblesort([6, 22, 61, 1, 89, 31, 9, 10, 76]))
Sortieren 1
Minsort
Minsort
Idee
Sortieren durch wiederholtes Finden des Minimums
Jedes Element wird mit diesem verglichen
Falls es kleiner ist, werden beide miteinander vertauscht
Nach einer Iteration wird Minimum an (aktuellen) Anfang kopiert Fahre fort, bisdatasortiert ist
Minsort
Idee
Sortieren durch wiederholtes Finden des Minimums
Anders als bei Bubblesort werden nicht benachbarte Elemente verglichen Aktuelles Minimum wird gespeichert
Jedes Element wird mit diesem verglichen
Falls es kleiner ist, werden beide miteinander vertauscht
Nach einer Iteration wird Minimum an (aktuellen) Anfang kopiert Fahre fort, bisdatasortiert ist
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 25 / 28
Idee
Sortieren durch wiederholtes Finden des Minimums
Anders als bei Bubblesort werden nicht benachbarte Elemente verglichen Aktuelles Minimum wird gespeichert
Jedes Element wird mit diesem verglichen
Falls es kleiner ist, werden beide miteinander vertauscht
Nach einer Iteration wird Minimum an (aktuellen) Anfang kopiert Fahre fort, bisdatasortiert ist
Minsort
def minsort(data):
n = len(data)
for current in range(0, n-1):
minimum = data[current]
for i in range(current+1, n):
if data[i] < minimum:
tmp = data[i]
data[i] = minimum minimum = tmp data[current] = minimum return data
print(minsort([6, 22, 61, 1, 89, 31, 9, 10, 76]))
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 26 / 28
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen
n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 27 / 28
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden
. . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 27 / 28
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren
ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 27 / 28
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Zeitkomplexität von Bubblesort und Minsort
Zähle die Vergleiche von jeweils zwei Zahlen n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 27 / 28
n−1Vergleiche, um das Maximum zu finden
n−2Vergleiche, um das zweitgrösste Element zu finden . . .
1Vergleich, um die beiden kleinsten Elemente zu sortieren ï InsgesamtPn−1i=1 i= (n−1)·n/2 = (n2−n)/2Vergleiche ï Quadratisch viele Vergleiche
Die Laufzeit von Bubblesort ist inO(n2)
Zeitkomplexität von Bubblesort und Minsort
10 20 30 40 50 60 70 80 90 100
0 1 000 2 000 3 000 4 000 5 000
Eingabelängen
Vergleiche
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 28 / 28
10 20 30 40 50 60 70 80 90 100 0
1 000 2 000 3 000 4 000
Bubblesort / Minsort
Vergleiche
Zeitkomplexität von Bubblesort und Minsort
10 20 30 40 50 60 70 80 90 100
0 1 000 2 000 3 000 4 000 5 000
Bubblesort / Minsort
Ziel
Eingabelängen
Vergleiche
Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 28 / 28