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-10 08:13] – [Aufgabe A3: Zäh Millione Kombinatione] hof | gf_informatik:suchen_und_sortieren [2026-05-04 17:32] (aktuell) – hof | ||
|---|---|---|---|
| Zeile 32: | Zeile 32: | ||
| 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 43: | ||
| 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 69: | ||
| 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> | + | <bottom-exercise showsolution id=" |
| + | < | ||
| names = [' | names = [' | ||
| ' | ' | ||
| Zeile 77: | Zeile 79: | ||
| ' | ' | ||
| ' | ' | ||
| - | </code> | + | </template> |
| + | < | ||
| + | assert linear_search(names, | ||
| + | assert linear_search([1, | ||
| + | </ | ||
| + | < | ||
| + | names = [' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | numbers = [' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | |||
| + | def linear_search(l, | ||
| + | for i in range(len(l)): | ||
| + | if l[i] == v: | ||
| + | return i | ||
| + | return None | ||
| + | |||
| + | index = linear_search(names, | ||
| + | print(numbers[index]) | ||
| + | </ | ||
| + | </ | ||
| - 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 90: | Zeile 117: | ||
| - 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. | ||
| ++++ | ++++ | ||
| - | |||
| - | |||
| - | <nodisp 2> | ||
| - | ++++Lösung| | ||
| - | <code python> | ||
| - | def linear_search(l, | ||
| - | for i in range(len(l)): | ||
| - | if l[i] == v: | ||
| - | return i | ||
| - | return None | ||
| - | |||
| - | index = linear_search(names, | ||
| - | print(numbers[index]) | ||
| - | </ | ||
| - | ++++ | ||
| - | </ | ||
| === Aufgabe A3: Zäh Millione Kombinatione === | === Aufgabe A3: Zäh Millione Kombinatione === | ||
| + | < | ||
| + | <div slot=" | ||
| 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, | + | <p>Für diese Aufgabe benötigst du zusätzlich eine weitere Python-Datei, |
| - | < | + | < |
| + | </ | ||
| + | < | ||
| from null79 import names, numbers | from null79 import names, numbers | ||
| - | </ | ||
| - | Damit das funktioniert, | + | index = 42 |
| - | + | ||
| - | == Mit WebTigerPython == | + | |
| - | Am einfachsten geht das mit [[https:// | + | |
| - | + | ||
| - | ++++ Mit TigerPython | + | |
| - | Lade die Datei [[https:// | + | |
| - | + | ||
| - | Du kannst das Telefonbuch wie folgt importieren und den Namen für eine Telefonnummer herausfinden. Der Code muss im gleichen Ordner wie `null79.py` abgespeichert werden! | + | |
| - | + | ||
| - | <code python> | + | |
| - | from null79 import names, numbers | + | |
| - | + | ||
| - | index = 42 | + | |
| 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}') |
| - | </code> | + | </template> |
| - | ++++ | + | < |
| - | == Aufgabe == | + | |
| - | + | ||
| - | Verwende deine `linear_search()` Funktion, um die richtige Telefonnummer von Lyanna herauszufinden. Wie lange dauert die Suche? | + | |
| - | + | ||
| - | <nodisp 2> | + | |
| - | ++++Lösung mit Code| | + | |
| - | <code python Aufgabe A3.py> | + | |
| from null79 import names, numbers | from null79 import names, numbers | ||
| Zeile 151: | Zeile 145: | ||
| 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> | + | </template> |
| + | </ | ||
| + | Oben ist die Datei `null79.py` bereits im gleichen Ordner hinterlegt - wenn du den Code in TigerJython oder VisualStudioCode ausführst, muss die Datei ebenfalls dort abgespeichert werden. | ||
| + | |||
| + | ++++ Mit TigerPython / VisualStudioCode :| | ||
| + | Mit [[https:// | ||
| + | |||
| + | Für VisualStudioCode: | ||
| + | |||
| + | Lade die Datei [[https:// | ||
| ++++ | ++++ | ||
| - | </ | ||
| === Aufgabe A4: Maximal sächsehalb Jahr lang === | === Aufgabe A4: Maximal sächsehalb Jahr lang === | ||
| Zeile 170: | Zeile 172: | ||
| 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> | + | <bottom-exercise id=" |
| + | < | ||
| import time | import time | ||
| + | # Startzeitpunkt bestimmen | ||
| start = time.time() | start = time.time() | ||
| - | # do something | ||
| - | elapsed = time.time() - start | ||
| - | print(" | ||
| - | </ | ||
| - | <nodisp 2> | + | # TODO: Hier muss die Suche passieren |
| - | ++++Lösung| | + | |
| - | <code python time_algos.py> | + | # Endzeitpunkt bestimmen und Differenz zum Start berechnen |
| + | elapsed = time.time() - start | ||
| + | # Ausgabe - das ': | ||
| + | print(f' | ||
| + | </template> | ||
| + | <template data-type=" | ||
| from null79 import names, numbers | from null79 import names, numbers | ||
| import time | import time | ||
| Zeile 199: | Zeile 204: | ||
| stopwatch(' | stopwatch(' | ||
| stopwatch(' | stopwatch(' | ||
| - | </code> | + | </template> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |
| === Aufgabe A5: Umgekehrte Suche === | === Aufgabe A5: Umgekehrte Suche === | ||
| Zeile 210: | Zeile 215: | ||
| ++++ | ++++ | ||
| - | < | + | < |
| ++++Code| | ++++Code| | ||
| - | <code python> | + | <bottom-editor timeout=" |
| idx = linear_search(numbers, | idx = linear_search(numbers, | ||
| print(names[idx]) | print(names[idx]) | ||
| - | </code> | + | </bottom-editor> |
| ++++ | ++++ | ||
| </ | </ | ||
| Zeile 225: | Zeile 230: | ||
| 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> | + | <bottom-editor> |
| s1 = ' | s1 = ' | ||
| s2 = ' | s2 = ' | ||
| Zeile 232: | Zeile 237: | ||
| 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 244: | ||
| * 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> | ||