Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:suchen_und_sortieren [2026-02-09 19:01] – [Aufgabe A4: Maximal sächsehalb Jahr lang] hof | gf_informatik:suchen_und_sortieren [2026-04-04 20:02] (aktuell) – hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Suchen und Sortieren ====== | ====== Suchen und Sortieren ====== | ||
| + | < | ||
| Weiter zu [[gf_informatik: | Weiter zu [[gf_informatik: | ||
| Zeile 32: | Zeile 33: | ||
| Der Sänger von _079_ will die Telefonnummer der Angebeteten unter allen möglichen Schweizer Mobilfunknummern (10-stellig) mit dem Präfix `079` herausfinden. Dafür probiert er sämtliche Nummern von `079 000 00 00` bis `079 999 99 99` durch, was natürlich ziemlich lange dauert... | Der Sänger von _079_ will die Telefonnummer der Angebeteten unter allen möglichen Schweizer Mobilfunknummern (10-stellig) mit dem Präfix `079` herausfinden. Dafür probiert er sämtliche Nummern von `079 000 00 00` bis `079 999 99 99` durch, was natürlich ziemlich lange dauert... | ||
| + | |||
| #### Aufgabe A1 - 079 | #### Aufgabe A1 - 079 | ||
| Zeile 42: | Zeile 44: | ||
| 1. Wie lange dauerte die Suche, wenn wir nicht einmal die Vorwahl kennen würden (aber wüssten, dass alle Nummern mit `0` beginnen)? | 1. Wie lange dauerte die Suche, wenn wir nicht einmal die Vorwahl kennen würden (aber wüssten, dass alle Nummern mit `0` beginnen)? | ||
| - | < | + | < |
| ++++Lösung| | ++++Lösung| | ||
| Zeile 68: | Zeile 70: | ||
| Zum Beispiel finden wir für den Index `1` Anela in `names[1]` und ihre Nummer 0790000001 in `numbers[1]`. | Zum Beispiel finden wir für den Index `1` Anela in `names[1]` und ihre Nummer 0790000001 in `numbers[1]`. | ||
| - | <code python lineare_suche.py> | + | <html>< |
| names = [' | names = [' | ||
| ' | ' | ||
| Zeile 77: | Zeile 79: | ||
| ' | ' | ||
| ' | ' | ||
| - | </code> | + | </bottom-editor></ |
| - Schreibe eine Python-Funktion `linear_search(l, | - Schreibe eine Python-Funktion `linear_search(l, | ||
| - Test: Der Funktionsaufruf `print(linear_search(names, | - Test: Der Funktionsaufruf `print(linear_search(names, | ||
| Zeile 85: | Zeile 88: | ||
| ++++Tipps (zuerst ohne Tipps versuchen!)| | ++++Tipps (zuerst ohne Tipps versuchen!)| | ||
| - | - Gehe IN der Funktion die Liste `l` alle möglichen Indices (Positionen) durch. | + | - Gehe IN der Funktion die Liste `l` alle möglichen Indices (Positionen) durch ([[gf_informatik: |
| - | - Vergleiche das Element an jedem Index mit dem gesuchten Wert `v`. | + | - Vergleiche das Element an jedem Index (also `l[index]`) |
| - Wenn es gleich ist: Gib den Index zurück. | - Wenn es gleich ist: Gib den Index zurück. | ||
| - Ausserhalb der Funktion: Lese nun aus der **anderen** Liste das Element mit dem eben ermittelten Index aus. | - Ausserhalb der Funktion: Lese nun aus der **anderen** Liste das Element mit dem eben ermittelten Index aus. | ||
| Zeile 92: | Zeile 95: | ||
| - | < | + | < |
| ++++Lösung| | ++++Lösung| | ||
| - | <code python> | + | <html>< |
| def linear_search(l, | def linear_search(l, | ||
| for i in range(len(l)): | for i in range(len(l)): | ||
| Zeile 103: | Zeile 106: | ||
| index = linear_search(names, | index = linear_search(names, | ||
| print(numbers[index]) | print(numbers[index]) | ||
| - | </code> | + | </bottom-editor></ |
| ++++ | ++++ | ||
| </ | </ | ||
| Zeile 110: | Zeile 113: | ||
| Für das kleine Telefonbuch oben ist es nicht so wichtig, wie schnell der Such-Algorithmus ist. Was aber, wenn wir wirklich alle 10 Millionen Kombinationen durchprobieren? | Für das kleine Telefonbuch oben ist es nicht so wichtig, wie schnell der Such-Algorithmus ist. Was aber, wenn wir wirklich alle 10 Millionen Kombinationen durchprobieren? | ||
| - | Für diese Aufgabe benötigst du zusätzlich eine weitere Python-Datei, | + | Für diese Aufgabe benötigst du zusätzlich eine weitere Python-Datei, |
| - | <code python> | + | Verwende deine `linear_search()` Funktion, um die richtige Telefonnummer von Lyanna herauszufinden. Wie lange dauert die Suche? |
| + | |||
| + | <html>< | ||
| from null79 import names, numbers | from null79 import names, numbers | ||
| - | </ | ||
| - | Damit das funktioniert, | + | index = 42 # TODO: Suche den Index von Lyanna! |
| + | name = names[index] | ||
| + | tel = numbers[index] | ||
| + | print(f' | ||
| + | </ | ||
| + | |||
| + | Oben ist die Datei `null79.py` | ||
| - | == Mit WebtigerPython | + | == Mit WebTigerPython |
| - | Am einfachsten geht das mit [[https:// | + | Am einfachsten geht das mit [[https:// |
| - | ++++ Mit TigerPython :| | + | ++++ Mit TigerPython |
| Lade die Datei [[https:// | Lade die Datei [[https:// | ||
| Zeile 129: | Zeile 139: | ||
| from null79 import names, numbers | from null79 import names, numbers | ||
| - | index = 42 | + | index = 42 # TODO: Suche den Index von Lyanna! |
| name = names[index] | name = names[index] | ||
| - | telnr = numbers[index] | + | tel = numbers[index] |
| - | print("Die Telefonnummer von " + name + " | + | print(f'Die Telefonnummer von {name} ist {tel}') |
| </ | </ | ||
| ++++ | ++++ | ||
| == Aufgabe == | == Aufgabe == | ||
| - | Verwende deine `linear_search()` Funktion, um die richtige Telefonnummer von Lyanna herauszufinden. Wie lange dauert die Suche? | ||
| - | < | + | < |
| ++++Lösung mit Code| | ++++Lösung mit Code| | ||
| - | <code python Aufgabe A3.py> | + | <html>< |
| from null79 import names, numbers | from null79 import names, numbers | ||
| Zeile 151: | Zeile 160: | ||
| name = ' | name = ' | ||
| - | idx = linear_search(names, | + | index = linear_search(names, |
| - | if idx == None: | + | if index == None: |
| print(" | print(" | ||
| else: | else: | ||
| - | tel = numbers[idx] | + | tel = numbers[index] |
| - | print("Die Telefonnummer von " + name + " | + | print(f'Die Telefonnummer von {name} ist {tel}') |
| print(" | print(" | ||
| print(" | print(" | ||
| print(" | print(" | ||
| - | </code> | + | </bottom-editor></ |
| ++++ | ++++ | ||
| Zeile 170: | Zeile 179: | ||
| Um in Python die Zeit zu stoppen, kannst du das `time` Modul verwenden. Wie lange dauert die Suche für die `Lyanna`? Wie lange für `Annina` oder `Zoraya`? Weshalb der Unterschied? | Um in Python die Zeit zu stoppen, kannst du das `time` Modul verwenden. Wie lange dauert die Suche für die `Lyanna`? Wie lange für `Annina` oder `Zoraya`? Weshalb der Unterschied? | ||
| - | <code python> | + | <html>< |
| import time | import time | ||
| + | # Startzeitpunkt bestimmen | ||
| start = time.time() | start = time.time() | ||
| - | # do something | + | |
| + | # TODO: Hier muss die Suche passieren | ||
| + | |||
| + | # Endzeitpunkt bestimmen und Differenz zum Start berechnen | ||
| elapsed = time.time() - start | elapsed = time.time() - start | ||
| - | print("do something took " + str(elapsed) + "s") | + | # Ausgabe - das ': |
| - | </code> | + | print(f' |
| + | </bottom-editor></ | ||
| - | < | + | < |
| ++++Lösung| | ++++Lösung| | ||
| - | <code python time_algos.py> | + | <html>< |
| from null79 import names, numbers | from null79 import names, numbers | ||
| import time | import time | ||
| Zeile 199: | Zeile 213: | ||
| stopwatch(' | stopwatch(' | ||
| stopwatch(' | stopwatch(' | ||
| - | </code> | + | </bottom-editor></ |
| ++++ | ++++ | ||
| </ | </ | ||
| Zeile 210: | Zeile 224: | ||
| ++++ | ++++ | ||
| - | < | + | < |
| ++++Code| | ++++Code| | ||
| - | <code python> | + | <html>< |
| idx = linear_search(numbers, | idx = linear_search(numbers, | ||
| print(names[idx]) | print(names[idx]) | ||
| - | </code> | + | </bottom-editor></ |
| ++++ | ++++ | ||
| </ | </ | ||
| Zeile 225: | Zeile 239: | ||
| Nun sind die Namen in `null79.names` *alphabetisch sortiert*. Sobald wir einen Namen antreffen, der alphabetisch nach dem gesuchten Wert liegt, können wir die Suche abbrechen. Strings können in Python mit den `>` und `<` Operatoren verglichen werden: | Nun sind die Namen in `null79.names` *alphabetisch sortiert*. Sobald wir einen Namen antreffen, der alphabetisch nach dem gesuchten Wert liegt, können wir die Suche abbrechen. Strings können in Python mit den `>` und `<` Operatoren verglichen werden: | ||
| - | <code python> | + | <html>< |
| s1 = ' | s1 = ' | ||
| s2 = ' | s2 = ' | ||
| Zeile 232: | Zeile 246: | ||
| else: | else: | ||
| print(s1 + ' liegt im Alphabet nach ' + s2) | print(s1 + ' liegt im Alphabet nach ' + s2) | ||
| - | </code> | + | </bottom-editor></ |
| Erweitere deine Funktion `linear_search()` wie folgt: | Erweitere deine Funktion `linear_search()` wie folgt: | ||
| Zeile 239: | Zeile 253: | ||
| * Ist die Liste sortiert, soll die Suche abbrechen, wenn wir im Alphabet bereits weiter sind als der gesuchte Wert. | * Ist die Liste sortiert, soll die Suche abbrechen, wenn wir im Alphabet bereits weiter sind als der gesuchte Wert. | ||
| - | < | + | < |
| ++++Lösung| | ++++Lösung| | ||
| <code python> | <code python> | ||