Algorithmen I Prof. Jörn Müller-Quade 17.05.2017 Institut für Theoretische Informatik Web: https://crypto.iti.kit.edu/index.php?id=799 (Folien von Peter Sanders) KIT Institut für Theoretische Informatik 1
Erinnerung VL vom 15.05.2017 Analyse von Hashtabellen mit verketteten Listen Erwartete Laufzeit O(1) bei zuf. Hashfkt. und falls M O(m) Guter Ersatz (hier) für zuf. Hashfkt.: universelle Hashfunktionen Hashtabellen mit linearer Suche: Schwierigkeit bei remove Heute: Gegenüberstellung Hashing mit Verketten mit linearer Suche (Probleme bei) Anwendungen von Hashtabellen Sortieren: Motivation KIT Institut für Theoretische Informatik 2
Verketten Lineare Suche Volllaufen: Verketten weniger empndlich. Unbeschränktes Hashing mit lin. Suche hat nur amortisiert konst. Einfügezeit Cache: Lineare Suche besser. Vor allem für doall Platz/Zeit Abwägung: Kompliziert! Abhängig von n, Füllgrad, Elementgröÿe, Implementierungsdetails bei Verketten (shared dummy!, t speichert Zeiger oder item), Speicherverwaltung bei Verketten, beschränkt oder nicht,... Referentielle Integrität: Nur bei Verketten! Leistungsgarantien: Universelles Hashing funktioniert so nur mit Verketten KIT Institut für Theoretische Informatik 3
Perfektes Hashing hier nicht KIT Institut für Theoretische Informatik 4
Mehr Hashing Hohe Wahrscheinlichkeit, Garantien für den schlechtesten Fall, Garantien für linear probing höhere Anforderungen an die Hash-Funktionen Hashing als Mittel zur Lastverteilung z. B., storage servers, (peer to peer Netze,... ) Zufallsextraktion durch universelles Hashing O(1) nd / perfektes Hashing KIT Institut für Theoretische Informatik 5
Hashtabellen für assoziative Arrays In Java: java.util.hashtable, in Python: dict Beispiel (Python): args["username"]="fred" (CGI-Skripte) Beispiel für Sicherheitsproblem (gelöst seit 2012): Webserver beantwortet HTTP-Anfragen mit Python-Skript HTTP-Parameter werden für Skript in dict eingelesen Problem: Hashfunktion h deterministisch (d.h. fest, bekannt!) Bösartige Anfrage: viele HTTP-Parameter x y mit gleichem h(x) Konsequenz: quadratischer Aufwand bei Einlesen/Verarbeiten von Skriptparametern Denial of Service Wie reparieren? KIT Institut für Theoretische Informatik 6
Kryptographische Hashfunktionen Universelle Hashfunktionen: kurze Ausgabe (typisch: 32 Bit), Kollisionen gleichmäÿig Kryptographische Hashfunktionen: längere Ausgabe (typisch: 128512 Bit), Kollisionen existieren, sind aber schwer zu nden Anwendungen für kryptographische Hashfunktionen: Fingerabdruck von groÿen Datenmengen Zertikate (z.b. für Webserver) Nutzerauthentikation (Unix: /etc/passwd) Beispiele: MD5 (unsicher), SHA-1 (unsicher), SHA-256, SHA-3 Mehr in Sicherheits-Vorlesung KIT Institut für Theoretische Informatik 7
Sortieren & Co KIT Institut für Theoretische Informatik 8
Formaler Gegeben: Elementfolge s = e 1,...,e n Gesucht: s = e 1,...,e n mit s ist Permutation von s e 1 e n für eine Totalordnung ` ' KIT Institut für Theoretische Informatik 9
Anwendungsbeispiele Allgemein: Vorverarbeitung Suche: Telefonbuch unsortierte Liste Gruppieren (Alternative Hashing?) KIT Institut für Theoretische Informatik 10
Beispiele aus Kurs/Buch Aufbau von Suchbäumen Kruskals MST-Algorithmus Rucksackproblem Scheduling, die schwersten Probleme zuerst Sekundärspeicheralgorithmen, z. B. Datenbank-Join Viele verwandte Probleme. Zum Beispiel Transposition dünner Matrizen, invertierten Index aufbauen, Konversion zwischen Graphrepräsentationen. KIT Institut für Theoretische Informatik 11
Überblick Einfache Algorithmen / kleine Datenmengen Mergesort ein erster ezienter Algorithmus Eine passende untere Schranke Quicksort das Auswahlproblem ganzzahlige Schlüssel jenseits der unteren Schranke KIT Institut für Theoretische Informatik 12