• Keine Ergebnisse gefunden

Ein schnellerer Primzahltest

N/A
N/A
Protected

Academic year: 2022

Aktie "Ein schnellerer Primzahltest"

Copied!
104
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Departement Informatik

Informatikgrundlagen

Daten einlesen und Sortieren

Hans-Joachim Böckenhauer Dennis Komm

Herbst 2021 – 4. November 2021

(2)

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

(3)

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

(4)

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)

(5)

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

(6)

Ein schnellerer Primzahltest

Wie gross ist diesmal die Verbesserung?

Was ist die Laufzeit dieses Algorithmus?

Schleife wird√

x/2Mal durchlaufen

(7)

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

(8)

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)

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

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

(20)
(21)

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

(22)

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

(23)

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

(24)

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)

(25)

Was kann man sonst noch machen?

(26)

Jede Zahl zwischen 1undxtesten

(27)

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

(28)

Jede Zahl zwischen 1undxtesten

Jede zweite Zahl zwischen 1undxtesten

Jede zweite Zahl zwischen 1und√

xtesten

(29)

Primzahltest

Randomisierter Monte-Carlo-

Algorithmus

Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 8 / 28

(30)

Randomisierter Monte-Carlo-

Algorithmus

Polynomieller

AKS-Algorithmus

(31)

Listen

Weiterführende Konzepte

(32)

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] ]

(33)

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

(34)

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] ]

(35)

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

(36)
(37)

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

(38)

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)

(39)

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

(40)

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

(41)

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

(42)

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

(43)

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

(44)

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" ]

(45)

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

(46)

Daten einlesen

3. Jeden Eintrag in Zahl konvertieren

data = [0] * len(tmp)

for i in range(0, len(tmp)):

data[i] = int(tmp[i])

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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

(52)
(53)

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

(54)

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

(55)

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

(56)
(57)

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

(58)

Bubblesort

5 1 4 3

(59)

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

(60)

Bubblesort

1 5 4 3

(61)

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

(62)

Bubblesort

1 5 4 3

(63)

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

(64)

Bubblesort

1 4 5 3

(65)

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

(66)

Bubblesort

1 4 3 5

(67)

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

(68)

Bubblesort

1 4 3 5

(69)

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

(70)

Bubblesort

1 4 3 5

(71)

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

(72)

Bubblesort

1 3 4 5

(73)

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

(74)

Bubblesort

1 3 4 5

(75)

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

(76)

Bubblesort

1 3 4 5

(77)

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

(78)

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

(79)

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

(80)

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

(81)

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

(82)

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

(83)

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

(84)

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

(85)

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

(86)

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]))

(87)

Sortieren 1

Minsort

(88)

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

(89)

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

(90)

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

(91)

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

(92)
(93)

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 = (n2n)/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

(94)

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 = (n2n)/2Vergleiche ï Quadratisch viele Vergleiche

Die Laufzeit von Bubblesort ist inO(n2)

Die Laufzeit von Minsort ist (mit ähnlichen Argumenten) inO(n2)

(95)

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 = (n2n)/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

(96)

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)

(97)

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 = (n2n)/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

(98)

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 = (n2n)/2Vergleiche ï Quadratisch viele Vergleiche

(99)

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 = (n2n)/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

(100)

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 = (n2n)/2Vergleiche ï Quadratisch viele Vergleiche

Die Laufzeit von Bubblesort ist inO(n2)

(101)

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

(102)

10 20 30 40 50 60 70 80 90 100 0

1 000 2 000 3 000 4 000

Bubblesort / Minsort

Vergleiche

(103)

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

(104)

Referenzen

ÄHNLICHE DOKUMENTE

Informatikgrundlagen für Humanmedizin – Einführung in die Vorlesung Herbst 2021 Böckenhauer, Komm 5 / 36... Computer

Informatikgrundlagen für Humanmedizin – Listen, Strings, Schleifen Herbst 2021 Böckenhauer, Komm 1 / 21... Die

Boolesche Ausdrücke können mögliche Werte F oder T annehmen F entspricht «falsch». T

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 2 / 26... aber nicht automatisch

Informatikgrundlagen für Humanmedizin – Funktionen und Rückgabewerte Herbst 2021 Böckenhauer, Komm 1 /

Informatikgrundlagen für Humanmedizin – Daten einlesen und Sortieren Herbst 2021 Böckenhauer, Komm 4 / 282. Ein

Informatikgrundlagen für Humanmedizin – numpy, matplotlib Herbst 2021 Böckenhauer, Komm 9 / 25.. Das Modul numpy. numpy ist Grundlage für viele weitere

Informatikgrundlagen für Humanmedizin – pandas Herbst 2021 Böckenhauer, Komm 4 / 18... Komplexität