====== Suchen und Sortieren ====== Weiter zu [[gf_informatik:suchen_und_sortieren:binaersuche|Binäre Suche]] Direkt zu [[gf_informatik:suchen_und_sortieren:sortieren|Sortieren]] ++++Lernziele lineare und binäre Suche:| * Ich kann erklären, wie die lineare Suche und wie die binäre Suche funktioniert. * Ich kann die beiden Such-Algorithmen (linear und binär) miteinander vergleichen, d.h. Unterschiede, Vor- und Nachteile/Voraussetzungen erklären. * Ich kann für eine gegebene Anzahl Einträge (Listen-Länge) die maximale Anzahl Abfragen für beide Such-Algorithmen berechnen. * Ich kann eine Funktion ''linear\_search(list, value)'' definieren, die nach der linearen Suche die **Position** von ''value'' in ''list'' zurückgibt. * Ich kann eine Funktion ''binary\_search(list, value)'' definieren, die nach der binären Suche die **Position** von ''value'' in ''list'' zurückgibt. * Ich kann Suchfunktionen (linear und binär) verwenden, um in mehreren zusammenpassenden Listen zusammengehörende Elemente zu finden – Beispiel: Ausgehend vom Namen über dessen Index in der Namensliste die entsprechende Nummer aus der Nummernliste ermitteln. ++++ ==== Einführung ==== Das Ziel einer Suche ist es, in einer grossen Datenmenge möglichst schnell das gesuchte Element zu finden. Beispielsweise suchen wir in einem Lexikon oder Wörterbuch den Eintrag zu einem Begriff, im Telefonbuch die Nummer einer Person oder eines Geschäfts. Heutzutage suchen wir zumeist im Internet - aber wie schafft es [[https://dict.leo.org/englisch-deutsch/search|dict.leo.org]] einen Suchbegriff innert Millisekunden zu finden? Wie findet [[https://tel.search.ch/kantonsschule%20romanshorn|tel.search.ch]] den richtigen Eintrag? ==== Lineare Suche ====
Gäb si mir wenigschtens d Vorwahl\\ Per favore\\ De gäbs nume no zäh Millione Kombinatione, ja\\ 079 het si gseit\\ „Du weisch immer no nüt“, het si gseit\\ Nidmau tschüss het si gseit, ey\\ Und i frage si ob ig ihri - tüt tüt tüt het si gseit, tüt tüt [[https://www.youtube.com/watch?v=C8Xv7MKigYo|079 by Lo & Leduc]]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 **Tipp**: Höre oder lese den Liedtext genau ([[https://www.songtexte.com/songtext/lo-and-leduc/079-g5bed3b18.html|Original]], [[https://www.swr3.de/musik/poplexikon/lyrics/lo--leduc-079--songtext-deutsche-bersetzung--lyrics-100.html|Hochdeutsch]], [[https://www.youtube.com/watch?v=C8Xv7MKigYo|Youtube]])! 1. Wie viele Telefonnummern muss der Sänger von _079_ durchprobieren? 1. Wie lange dauert das Probieren einer Telefonnummer? 1. Wie lange dauert die Suche nach der richtigen Nummer bei _079_? 1. Wieso dauert es so lange? Was ist die Rechnung, die hinter der genannten Dauer steckt? 1. Wie lange dauerte die Suche, wenn wir nicht einmal die Vorwahl kennen würden (aber wüssten, dass alle Nummern mit `0` beginnen)?
De gäbs nume no zäh Millione Kombinatione, ja\\ 1. 20 Sekunden -
U weni nächär pro Minute drü vo de Nummere usprobier\\ 1. 6.5 Jahre -
De chönnts maximal nume sächsehalb Jahr lang ga\\ 1. $\frac{10\,000\,000}{365\frac{d}{y} \cdot 24\frac{h}{d} \cdot 60\frac{m}{h} \cdot \frac{3}{m}} \approx 6.342y$ 1. Wir hätten nochmals zwei Dezimalstellen, also 100 Mal mehr Möglichkeiten, damit 634 Jahre. ++++
Für diese Aufgabe benötigst du zusätzlich eine weitere Python-Datei, null79.py, die wir in unserem selbstgeschriebenen Code importieren. Dazu verwenden wir ähnlich wie zu Turtle-Zeiten das Schlüsselwort import.
Verwende deine linear_search() Funktion, um die richtige Telefonnummer von Lyanna herauszufinden. Wie lange dauert die Suche?
def linear_search(l, v, is_sorted=False):
for i in range(len(l)):
if l[i] == v:
return i
if is_sorted and l[i] > v:
return None
return None
++++