Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
lesson:first [2023/08/12 15:54] – [Was ist Informatik eigentlich?] mccab99 | lesson:first [2023/08/27 13:44] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ===== Was ist Informatik eigentlich? | + | ===== Über Algorithmen |
<WRAP center round info 95%> | <WRAP center round info 95%> | ||
Zeile 28: | Zeile 28: | ||
Bestimmt ist dir beim Tippen in dem Textfeld schon aufgefallen, | Bestimmt ist dir beim Tippen in dem Textfeld schon aufgefallen, | ||
+ | ++++Mehr zu Etherpad | | ||
<WRAP center round tip 95%> | <WRAP center round tip 95%> | ||
=== Tipp 1: Mehr über Etherpad erfahren === | === Tipp 1: Mehr über Etherpad erfahren === | ||
Zeile 33: | Zeile 34: | ||
{{youtube> | {{youtube> | ||
</ | </ | ||
+ | ++++ | ||
==== Informatik löst Probleme ==== | ==== Informatik löst Probleme ==== | ||
<WRAP center round todo 95%> | <WRAP center round todo 95%> | ||
Zeile 80: | Zeile 81: | ||
Algorithmen werden in der Informatik mit Programmiersprachen umgesetzt. Das sind Sprachen, mit denen sich Lösungsstrategien sehr gut und eindeutig formulieren lassen. Diese Sprachen unterscheiden sich voneinander in ihrer Syntax und ihren Möglichkeiten. Wie du noch sehen wirst, muss so eine Sprache noch nicht einmal Text enthalten - einfache Symbole oder gar Farben erfüllen auch diesen Zweck. | Algorithmen werden in der Informatik mit Programmiersprachen umgesetzt. Das sind Sprachen, mit denen sich Lösungsstrategien sehr gut und eindeutig formulieren lassen. Diese Sprachen unterscheiden sich voneinander in ihrer Syntax und ihren Möglichkeiten. Wie du noch sehen wirst, muss so eine Sprache noch nicht einmal Text enthalten - einfache Symbole oder gar Farben erfüllen auch diesen Zweck. | ||
+ | |||
+ | ++++Bubblesort in der Programmiersprache Python | | ||
+ | Du kannst dir hier die Umsetzung von Bubblesort in Python ansehen - einer momentan sehr weit verbreiteten Programmiersprache. | ||
+ | |||
+ | <file python bubblesort.py> | ||
+ | def bubbleSort(arr): | ||
+ | # Anzahl der Zahlen ermitteln | ||
+ | n = len(arr) | ||
+ | # Erstmal nehmen wir an, dass keine Vertauschungen notwendig waren | ||
+ | swapped = False | ||
+ | # Jetzt nehmen wir uns jede Zahl vor und vergleichen sie mit ihrer Nachbarzahl | ||
+ | for i in range(n-1): | ||
+ | # " | ||
+ | # i ist ein Zähler und erhöht sich bei jedem Durchlauf um 1 | ||
+ | # die letzte Zahl lassen wir beim Vergleich aus | ||
+ | # wir gehen nur bis zur vorletzten (n-1) | ||
+ | # das sind praktisch die " | ||
+ | for j in range(0, n-i-1): | ||
+ | |||
+ | # bei jedem Durchlauf müssen wir Schritt für Schritt durch die | ||
+ | # noch nicht geprüften Zahlen gehen | ||
+ | # Durchlauf 1 - Schritt 1, Durchlauf 1 - Schritt 2 usw. | ||
+ | if arr[j] > arr[j + 1]: | ||
+ | swapped = True | ||
+ | arr[j], arr[j + 1] = arr[j + 1], arr[j] | ||
+ | |||
+ | if not swapped: | ||
+ | # wenn wir nichts tauschen mussten, sind wir fertig | ||
+ | return | ||
+ | |||
+ | |||
+ | # Zahlen, die zu sortieren sind | ||
+ | arr = [64, 34, 25, 12, 22, 11, 90] | ||
+ | |||
+ | bubbleSort(arr) | ||
+ | |||
+ | print(" | ||
+ | for i in range(len(arr)): | ||
+ | print(" | ||
+ | </ | ||
+ | ++++ | ||
<WRAP center round todo 95%> | <WRAP center round todo 95%> | ||
Zeile 157: | Zeile 199: | ||
- Schreibe die Abfolge der Durchläufe in der kurzen Schreibweise für diese Zahlenreihe auf. | - Schreibe die Abfolge der Durchläufe in der kurzen Schreibweise für diese Zahlenreihe auf. | ||
- Vergleiche zwischendurch immer mal wieder mit den Lösungen deiner Nachbarn. | - Vergleiche zwischendurch immer mal wieder mit den Lösungen deiner Nachbarn. | ||
+ | - [[loesung: | ||
</ | </ | ||
Zeile 168: | Zeile 211: | ||
* Was sagt dein Gefühl über die Anzahl der Vergleiche, die für die Sortierung benötigt werden, im Unterschied zu Bubblesort? | * Was sagt dein Gefühl über die Anzahl der Vergleiche, die für die Sortierung benötigt werden, im Unterschied zu Bubblesort? | ||
+ | ++++Auflösung | | ||
+ | |||
+ | Das Aufwändige für einen Rechner sind Vergleiche. Im Prinzip muss man für einen Vergleich eine Subtraktion durchführen und dann zwei Fälle unterscheiden: | ||
+ | - Ist das Ergebnis 0, dann sind die Zahlen gleich | ||
+ | - Ist das Ergebnis von 0 verschieden, | ||
+ | |||
+ | Ein Tausch von Zahlen ist dagegen vergleichweise einfach - es wird intern nur ein Zeiger umgestellt. [[loesung: | ||
+ | |||
+ | Quicksort ist etwas schwieriger syntaktisch aufzuschreiben, | ||
+ | * das aktuelle Pivotelement ist **fett** formatiert. | ||
+ | * eine unterstrichene Zahl ist ein Zahl, die mit dem Pivot-Element verglichen wurde | ||
+ | * die Anzahl der unterstrichenen Zahlen ist also die Gesamtzahl der Vergleiche im aktuellen Durchgang | ||
+ | |||
+ | **Durchgang 1 - 6 ist Pivotelement: | ||
+ | __3__ __7__ 1 8 2 5 9 __4__ **6**\\ | ||
+ | 3 //4// 1 8 2 5 9 //7// **6** ( 4 und 7 wurden getauscht)\\ | ||
+ | 3 4 __1__ __8__ 2 __5__ __9__ 7 **6**\\ | ||
+ | 3 4 1 //5// 2 //8// 9 7 **6**( 5 und 8 wurden getauscht)\\ | ||
+ | [ 3 4 1 5 2 ] //6// [ 9 7 //8// ] ( 6 und 8 wurden getauscht, Vergleich war unnötig, die 6 muss die kleinste Zahl sein)\\ | ||
+ | |||
+ | Wir haben in diesem ersten Durchgang insgesamt 7x Zahlen miteinander verglichen. Die 6 liegt jetzt schon auf ihrer Endposition. | ||
+ | |||
+ | Wir werden weiterhin ... | ||
+ | * für das Pivot-Element **2** 3x vergleichen müssen | ||
+ | * für das Pivot-Element **4** 2x vergleichen müssen | ||
+ | * für das Pivot-Element **8** 1x vergleichen müssen | ||
+ | |||
+ | Wir kommen also mit 13 Vergleichen aus. Quicksort ist um Größenordnungen effizienter als Bubblesort. Bei einer bereits sortierten Liste (Best-Case) bringt Quicksort keinen Nachteil gegenüber Bubblesort. | ||
+ | ++++ | ||
===== Ja, und was ist jetzt mit Informatik? ===== | ===== Ja, und was ist jetzt mit Informatik? ===== | ||
Für eine ganz präzise Formulierung ist es jetzt noch zu früh, aber du hast unglaublich wichtige Grundprinzipien eines // | Für eine ganz präzise Formulierung ist es jetzt noch zu früh, aber du hast unglaublich wichtige Grundprinzipien eines // |